如何添加2个递归函数

时间:2017-03-22 14:16:44

标签: c++

递归函数如何返回printCountRec(dist-1)+ printCountRec(dist-2);适用于以下代码。通过我的逻辑printCountRec(dist-1)函数调用将返回1并且printCountRec(dist-2)将通过添加这两个返回0,答案应该是1 + 0即1但我得到答案为3.我不是得到它。

计算距离的计数方式; 代码如下 -

#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;
}

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 = 1返回printCountRec(1)

    换句话说,你有这个订单:

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

    因此,添加的第二个成员将评估为1

添加两个成员(21)会为您提供结果3

答案 2 :(得分: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.