0

我正在学习 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将 as 传递给函数1,无论我将函数称为 as ,这似乎总是如此countdown(10)

如果我在这里遗漏了一些明显的东西,有人可以告诉我吗?

4

2 回答 2

3

你的' cout << 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;
}
于 2013-03-16T21:20:33.077 回答
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将 转换coutbool并且bool可以转换为int. 请不要写这样的代码。

于 2013-03-16T21:20:34.537 回答