자바 재귀
자바 재귀
재귀는 함수 자체를 호출하는 기술입니다. 이 기술은 복잡한 문제를 해결하기 쉬운 간단한 문제로 나누는 방법을 제공합니다.
재귀는 이해하기 다소 어려울 수 있습니다. 어떻게 작동하는지 알아내는 가장 좋은 방법은 실험하는 것입니다.
재귀 예제
두 숫자를 더하는 것은 쉽지만 숫자 범위를 더하는 것은 더 복잡합니다. 다음 예에서 재귀는 두 개의 숫자를 더하는 간단한 작업으로 나누어 숫자 범위를 더하는 데 사용됩니다.
예시
10까지의 모든 숫자를 더하려면 재귀를 사용하십시오.
public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result);
}public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0;
}}
}
예시 설명
sum()
함수가 호출되면 그보다 작은 모든 숫자의 합에 매개변수를 추가 하고 k
결과 k
를 반환합니다. k가 0이 되면 함수는 0을 반환합니다. 실행할 때 프로그램은 다음 단계를 따릅니다.
10 + 합(9)
10 + ( 9 + 합(8) )
10 + ( 9 + ( 8 + 합(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 합(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
10 + ( 9 + 합(8) )
10 + ( 9 + ( 8 + 합(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 합(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
가 0일 때 함수는 자신을 호출하지 않기 때문에 k
프로그램은 거기서 멈추고 결과를 반환합니다.
정지 상태
루프가 무한 루프 문제에 부딪힐 수 있는 것처럼 재귀 함수는 무한 재귀 문제에 부딪힐 수 있습니다. 무한 재귀는 함수가 자체 호출을 멈추지 않는 경우입니다. 모든 재귀 함수에는 함수가 자체 호출을 중지하는 조건인 정지 조건이 있어야 합니다. 앞의 예에서 정지 조건은 매개변수 k
가 0이 될 때입니다.
개념을 더 잘 이해하려면 다양한 예를 보는 것이 도움이 됩니다. 이 예에서 함수는 시작과 끝 사이에 숫자 범위를 추가합니다. 이 재귀 함수의 정지 조건은 end 가 start 보다 크지 않을 때입니다 .
예시
재귀를 사용하여 5에서 10 사이의 모든 숫자를 더합니다.
public class Main { public static void main(String[] args) { int result = sum(5, 10); System.out.println(result);
}public static int sum(int start, int end) { if (end > start) { return end + sum(start, end - 1); } else { return end; } } }