jvm에서 재귀가 어떻게 작동하는지 궁금합니다. 예제를 따르십시오. 주어진 숫자의 첫 번째 계승 계산.재귀 메서드 호출의 순서
public class Factorial {
public int factorial(int n) {
System.out.println("Factorial: " + n);
if (n < 2) {
return 1;
}
return n * factorial(n - 1);
}
다음 테스트를
@Test
public void test_factorial() {
Factorial fact = new Factorial();
System.out.println(fact.factorial(3));
}
표시
3
2
1
실행 그리고 그것은 분명한 것 같다, 메서드 호출 스택에 배치됩니다, 실행은 n 개의 == 1에 도달하며 돌아갑니다. 이제 fibonacci 숫자를 계산하려고했습니다.
public int fibo(String name, int n) {
System.out.println("fibo: " + name + " " + n);
if (n < 2) {
return n;
}
return fibo ("left", n - 1) + fibo ("right", n - 2);
}
테스트 실행
@Test
public void test_fibonacci() {
Fibo fibo = new Fibo();
assertEquals(8, fibo.fibo("start",6));
}
다음 무엇을 인쇄
fibo: start 6
fibo: left 5
fibo: left 4
fibo: left 3
fibo: left 2
fibo: left 1
fibo: right 0
fibo: right 1
fibo: right 2
fibo: left 1
fibo: right 0
fibo: right 3
fibo: left 2
fibo: left 1
fibo: right 0
fibo: right 1
fibo: right 4
fibo: left 3
fibo: left 2
fibo: left 1
fibo: right 0
fibo: right 1
fibo: right 2
fibo: left 1
fibo: right 0
내 질문 메소드를 호출하고이 예에서 스택에 넣어의 규칙은 무엇입니까?
, 피 피보나치 스타일의 재귀 프로그램을, 그들이 메소드 호출의 지수 양 초래하기 때문이다. –
함수 호출의 트리를 그려 보면 동작을 아주 명확하게해야합니다. 요약 : 모든 매개 변수가 실행 된 후 함수가 호출되고 함수의 매개 변수가 왼쪽에서 오른쪽으로 실행됩니다. – Voo