2013-03-16 101 views
0

我正在学习C++,并且在自己调用某个函数时无法使递归工作。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)

有人能告诉我,如果我在这里错过了一些明显的东西吗?

回答

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; 
} 
+0

我明白我在做什么错 - cout << y应该在函数内部。谢谢你的帮助。 – 2013-03-16 21:32:46

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 %&& coutcout转换为bool,并且bool可以转换为int。请不要写这样的代码。

+0

嗨克里斯托弗,谢谢你的建议。是否参考了返回1 && cout << y << endl;线?有没有更好的方法来排除为什么这不起作用? – 2013-03-16 21:31:29

+1

是的。把'cout'放在它自己的一行中,在'return'命令前面。 '&&'操作符在文本描述中所说的所有地方都没有用“,”,它具有非常具体的含义,在这里你不是这个意思。 – 2013-03-16 21:33:26

+0

已注意。非常感谢。 – 2013-03-16 21:36:09