我正在学习C ++,当我自己调用一个函数时,我无法使递归工作。
#include <iostream>
using namespace std;
int countdown(int y) {
if (y==1) {
return 1 && cout << y << endl;
}
else {
return countdown(y-1);
}
}
int main () {
cout << "Countdown from ten: " << endl;
cout << countdown(10) << endl;
}
当然还有其他方法可以实现这一点,但实际上我创建了这个例子来验证我自己对如何递归调用函数的理解。
在示例中,我添加了&& cout << y
来验证y
是否作为1
传递给函数,无论我将该函数称为{{countdown(10)
,都会出现这种情况。 1}}。
有人可以告诉我,我是否遗漏了一些明显的东西吗?
答案 0 :(得分:3)
你的'cout&lt;&lt; y'仅在y被测试为1时执行。
此版本的功能符合我的要求:
#include <iostream>
using namespace std;
int countdown(int y)
{
cout << y << endl;
if (y==1)
{
return 1;
}
else
{
return countdown(y-1);
}
}
int main()
{
cout << "Countdown from ten: " << endl;
cout << countdown(10) << endl;
}
答案 1 :(得分:1)
您的调用堆栈如下所示:
main
countdown(10)
countdown(9)
countdown(8)
countdown(7)
countdown(6)
countdown(5)
countdown(4)
countdown(3)
countdown(2)
countdown(1)
std::cout << 1 << std::endl;
如果要查看整个倒计时,请将输出命令移到if条件前面。
此外,您编写输出的风格非常单一。请注意,它才有效,因为1 %&& cout
会将cout
转换为bool
,而bool
可以转换为int
。请不要写那样的代码。