2013-03-16 97 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