2017-03-22 1 views
0

재귀 함수는 printCountRec (dist-1) + printCountRec (dist-2)를 어떻게 반환합니까? 다음 코드에서 작동합니다. 내 논리에 의해 printCountRec (dist-1) 함수 호출은 1을 반환하고 printCountRec (dist-2)는이 두 값을 더하여 0을 반환 할 것이고, 대답은 1 + 0 ie 1이어야하지만 3으로 응답을 얻고있다. 나는 그렇지 않다. 점점.2 재귀 함수의 추가 작동 방법

거리 계산 방법 : 이것은 내가 당신의 재귀 다음있어 어떻게

#include <iostream> 
using namespace std; 


int printCountRec(int dist) 
{ 
    // Base cases 
    if (dist<0) return 0; 
    else if (dist==0) return 1; 

    // Recur for all previous 3 and add the results 
    else return printCountRec(dist-1) + printCountRec(dist-2); 

} 

int main() 
{ 
    int dist = 3; 
    cout << printCountRec(dist); 
    return 0; 
} 
+0

왜 이것을 C로 태그 했습니까? 이것은 유효한 C 코드가 아닙니다. 그리고 디버거를 사용하는 방법을 배우고 코드를 실행하여 무엇을하는지 이해해야합니다. – UnholySheep

+0

디버거를 사용하여 코드를 단계별로 실행해야하는 것처럼 들립니다. 그러면 프로그램 흐름이 정확하게 표시됩니다. – NathanOliver

답변

2

follows-으로 코드는 다음과 같습니다

printCountRec(-1) = 0 
printCountRec(0) = 1 
printCountRec(1) = printCountRec(0) + printCountRec(-1) = 1 
printCountRec(2) = printCountRec(1) + printCountRec(0) = 2 
printCountRec(3) = printCountRec(2) + printCountRec(1) = 3 
0

printCountRec (DIST-1) 함수 호출이 반환 1 printCountRec (DIST- 2)는 0을 반환합니다.

어떻게 생각 했습니까? 단계별 :

  • printCountRec(dist-1)

    printCountRec(1) + printCountRec(0)를 호출 printCountRec(2) 의미한다. 이 두 경우 첫 번째는 printCountRec(0) + printCountRec(-1)으로 전화를 걸어 1+0 = 1을 printCountRec (2)에 반환하고 두 번째는 1을 printCountRec (2)에 반환합니다.
    printCountRec(dist-1) = printCountRec(2) --> 
    printCountRec(1) + printCountRec(0) --> 
    printCountRec(0) + printCountRec(-1) + 1 --> 
    1 + 0 + 1 --> 3 
    

    그래서 추가의 첫 번째 멤버가 2로 평가된다 : 즉

    당신은 순서가있다.

  • printCountRec(dist-2)printCountRec(1)1+0 = 1를 반환 printCountRec(0) + printCountRec(-1)를 호출하는 수단 printCountRec(1).

    printCountRec(dist-2) = printCountRec(1) --> 
    printCountRec(0) + printCountRec(-1) --> 
    1 + 0 --> 1 
    

    그래서 추가의 제 2 부재가 1로 평가된다 : 즉

    당신은 순서가있다.

두 멤버 (21)를 추가하는 것은 당신에게 결과 3을 제공합니다.

0

DIST = -1 출력 0

DIST = 0 1 출력

DIST = 1 개 출력 1

DIST = 2 개 출력 2

DIST = 3 개 출력 3

printCountRec (2) = printCountRec (1) + printCountRec (0) = 2

printCountRec (3) = printCountRec (2) + printCountRec (1) = 2 + 1 = 3.