它问道:
修改递归兔子函数,以便在视觉上轻松地遵循执行流程。只需添加“Enter”和“Leave”消息,根据当前递归调用的“深度”缩进跟踪消息。
通过在递归兔函数中正确添加空格,更好地了解递归的工作原理。
这是程序应该显示的内容:
Enter rabbit: n = 4
Enter rabbit: n = 3
Enter rabbit: n = 2
Leave rabbit: n = 2 value = 1
Enter rabbit: n = 1
Leave rabbit: n = 1 value = 1
Leave rabbit: n = 3 value = 2
Enter rabbit: n = 2
Leave rabbit: n = 2 value = 1
Leave rabbit: n = 4 value = 3
我真的不知道如何获得正确的缩进或如何显示n大于2的“离开兔子”。到目前为止,我的代码是:
#include <iostream>
#include <iomanip>
int rabbit(int);
using namespace std;
int main()
{
cout << rabbit(4) << endl;
return 0;
}
int rabbit(int n)
{
cout << "Enter rabbit: n = " << n << endl;
if(n <=2)
{
cout << "Leave rabbit: n = " << n << endl;
return 1;
}
else
{
return rabbit(n - 1) + rabbit(n - 2);
}
}
有人能指出我正确的方向吗?非常感谢你。
编辑:
我有点接近,但它仍然缺少显示“离开兔子:n = 3”和“离开兔子:n = 4”的能力。
这是我的新代码:
#include <iostream>
#include <iomanip>
int rabbit(int, int);
using namespace std;
int main()
{
int months;
cout << "How many months?" << endl << "Months ::: ";
cin >> months;
cout << rabbit(months, 0) << endl;
return 0;
}
int rabbit(int n, int parameter)
{
int value;
for(int i = 0; i < parameter; i++)
{
cout << " ";
}
cout << "Enter rabbit: n = " << n << endl;
if(n <=2)
{
for(int i = 0; i < parameter; i++)
{
cout << " ";
}
value = 1;
cout << "Leave rabbit: n = " << n << " value = " << value << endl;
return value;
}
else
{
return rabbit(n - 1, parameter + 1) + rabbit(n - 2, parameter + 1);
}
}
答案 0 :(得分:2)
在SO上,我们尽量不为作业提供代码解决方案,而且您只是要求提示。
解决任何问题的关键是要说清楚。
如果查看所需的输出,可以看到
第一次调用的输出没有缩进。
下一次调用的输出缩进3个空格。
下一次调用的输出会缩进3个空格。
那么:rabbit
的调用级别与缩进量之间的关系是什么?
如果对rabbit
有更多,更深入的调用,我们会期望一个好的解决方案继续工作,提供更高级别的缩进。
答案 1 :(得分:0)
我认为你会踢自己,所有你需要做的就是在两种情况下使用值变量。
int rabbit(int n, int parameter)
{
int value;
for(int i = 0; i < parameter; i++)
{
cout << " ";
}
cout << "Enter rabbit: n = " << n << endl;
if(n <=2)
{
value = 1;
}
else
{
value = rabbit(n - 1, parameter + 1) + rabbit(n - 2, parameter + 1);
}
for(int i = 0; i < parameter; i++)
{
cout << " ";
}
cout << "Leave rabbit: n = " << n << " value = " << value << endl;
return value;
}