2017-03-22 82 views
0

递归函数如何返回printCountRec(dist-1)+ printCountRec(dist-2);在以下代码中工作。通过我的逻辑printCountRec(dist-1)函数调用将返回1和printCountRec(dist-2)将通过添加这两个返回0,答案应该是1 + 0即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

这是我怎样,我按照你的递归:

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(2),这将调用printCountRec(1) + printCountRec(0)。对于这两个,第一个将调用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),它将调用printCountRec(0) + printCountRec(-1),返回1+0 = 1printCountRec(1)

    换句话说,你有这样的顺序:

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

    所以加的第二部件进行评估,以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。