递归函数如何返回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;
}
答案 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
。
添加两个成员(2
和1
)会为您提供结果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.