English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 Java 재귀 함수와 그 장단점을 배웁니다.
Java에서는 자신을 호출하는메서드재귀 메서드라고 합니다. 그리고 이 과정을 재귀라고 합니다.
물리 세계의 예는 서로 마주보고 있는 두 개의 평행 반사镜입니다. 그들 사이의 어떤 물체도 재귀적으로 반사됩니다.
위의 예제에서 우리는 main 메서드 내부에서 recurse() 메서드를 호출했습니다. (정상적인 메서드 호출). 그리고 recurse() 메서드 내부에서 다시 같은 recurse 메서드를 호출했습니다. 이것은 재귀 호출입니다.
재귀 호출을 중지하기 위해 메서드 내부에 조건을 제공해야 합니다. 그렇지 않으면 이 메서드가 무한 호출됩니다.
따라서 우리는if ... else 문(또는 유사한 방법)종료 메서드 내부의 재귀 호출을 중지합니다。
class Factorial { static int factorial( int n ) { if (n != 0) // 종료 조건 return n * factorial(n-1); //재귀 호출 else return 1; } public static void main(String[] args) { int number = 4, result; result = factorial(number); System.out.println(number + " 의 대수= " + result); } }
출력:
4 의 대수 24
위의 예제에서 factorial() 메서드가 있습니다. main() 메서드에서 factorial()를 호출합니다. 전달된 숫자 변수를 매개변수로 사용합니다.
여기서 주의해야 할 다음과 같은 문장이 있습니다:
return n * factorial(n-1);
factorial() 메서드가 자신을 호출하고 있습니다. 초기에 n의 값은 factorial() 내부에서4. 다음 재귀 호출 중에,3factorial() 메서드에 전달됩니다. 이 과정은 n이 0이 되까지 지속됩니다.
n이 0이 되면, if 문이 false를 반환하여 return1. 마지막으로, 누적된 결과를 main() 메서드에 전달합니다.
아래 그림은 재귀를 사용하여 팩토리얼 프로그램을 실행하는 방법을 더 잘 이해하도록 도와줍니다.
재귀 호출을 할 때, 스택에 새로운 변수 저장 위치가 할당됩니다. 각 재귀 호출이 반환될 때마다, 오래된 변수와 매개변수는 스택에서 제거됩니다. 따라서, 재귀는 일반적으로 더 많은 메모리를 사용하며 일반적으로 더 느리게 작동합니다.
다른 한편, 재귀 솔루션은 더 간단하며 작성, 디버깅 및 유지보수에 더 적은 시간이 소요됩니다.