C++递归rabbit赋值
C++ Recursive rabbit assignment
它询问:
修改递归rabbit函数,使其在视觉上易于遵循执行流程。不只是添加"Enter"answers"Leave"消息,而是根据当前递归调用的"深度"来缩进跟踪消息
通过在递归rabbit函数中正确添加空白,可以更好地理解递归是如何工作的。
这是程序应该显示的内容:
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);
}
}
有人能给我指正确的方向吗?非常感谢。
编辑:
我有点接近,但它仍然缺少显示"Leave rabbit:n=3"answers"Leave rabbit: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);
}
}
在SO上,我们尽量不为分配提供代码解决方案,值得称赞的是,您只是在寻求提示。
解决任何问题的关键是把问题说清楚。
如果你查看所需的输出,你可以看到
-
第一个调用的输出没有缩进。
-
下一个调用的输出缩进3个空格。
-
下一个调用的输出缩进3个空格。
那么:对rabbit
的调用级别与缩进量之间的关系是什么?
如果对rabbit
有更多、更深入的调用,我们希望一个好的解决方案能够继续工作,提供更高级别的缩进。
我想你会后悔的,你所需要做的就是在这两种情况下都使用值变量。
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;
}
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- cin >> int 给定一个字符串将 int 赋值为 0
- if 子句中的赋值不起作用
- C++递归rabbit赋值