2014-05-22 2 views
1

아래의 메서드는 n = 20을 주면 5를 반환합니다.
제 질문은 각 반복마다 어떻게 하나씩 증가합니까?Java 재귀 메서드

mystery(10) + 1 
= mystery(5) + 2 
= mystery(2) + 3 
= mystery(1) + 4 
= mystery(0) + 5 = 5. 

나는 재귀에 어려움을 겪고있다.

public static int mystery(int n){ 
    if(n <= 0){ 
     return 0; 
    }else{ 
     return mystery(n/2) + 1; 
    } 
} 
+1

제 질문은 어떻게 반복마다 하나씩 증가합니까? 명확히하십시오. – Coda17

+0

디버거에서 단계별로 수행하십시오 - 모두 대답 할 것입니다 – KevinDTimm

+0

간단히 말해서'ln (n) + 1'을 리턴한다고 생각할 수 있습니다. – devnull

답변

8
mystery(20) = mystery(10) + 1 
mystery(20) = (mystery(5) + 1) + 1 
mystery(20) = ((mystery(2) + 1) + 1) + 1 
mystery(20) = (((mystery(1) + 1) + 1) + 1) + 1 
mystery(20) = ((((mystery(0) + 1) + 1) + 1) + 1) + 1 

우리는 알고 mystery(0) = 0

mystery(20) = ((((0 + 1) + 1) + 1) + 1) + 1 
mystery(20) = (((1 + 1) + 1) + 1) + 1 
mystery(20) = ((2 + 1) + 1) + 1 
mystery(20) = (3 + 1) + 1 
mystery(20) = 4 + 1 
mystery(20) = 5 

또는 간단히 말해, 우리는 여기에 재귀에 1+1+1+1+1=5

꽤 좋은 영상을 얻을 : https://www.youtube.com/watch?v=Mv9NEXX1VHc

+0

감사합니다. 유용한 비디오 및 설명. – Bob

+0

@ user3545850 환영합니다. 기쁜 데 도움이됩니다. – AntonH

1

모든 시간 mystery()이 호출되면 값을 반환합니다. 전자는 자신을 호출하여 반환에 1을 더한 그래서, 모든 호출에 대해 반환 된 숫자는 명백한 있는지 확인해야 코드를 보면 1

3

씩 증가됩니다 :

mystery(20) = mystery(10) + 1 
mystery(10) = mystery(5) + 1 
mystery(5) = mystery(2) + 1 
mystery(2) = mystery(1) + 1 
mystery(1) = mystery(0) + 1 
mystery(0) = 0 

이제 돌아가서 플러그 모든 값들, 예.

mystery(1) = mystery(0) + 1 = 0 + 1 = 1 
mystery(2) = mystery(1) + 1 = 1 + 1 = 2 
mystery(5) = mystery(2) + 1 = 2 + 1 = 3, etc.