2015-09-02 74 views
3
#include <stdio> 
using std::cout; 
void CountDown(int N) { 
    if(N == 0) { 
    return; 
    } 
    cout << N; 
    CountDown(N-1); 
    //return; 
} 

在代碼中,當返回被註釋時得到的輸出與未註釋時相同。使用return;在遞歸函數中

我想問的是,如果我在函數的末尾使用return;語句(因爲它會隱式地返回到調用大括號末尾的函數),它是否會產生影響?

另一個問題: 如果在這裏有一個返回類型而不是void的函數怎麼辦? 我用一個函數試了一下。值錯了,但沒有編譯器錯誤。 所以簡單地使用return;就沒有區別吧?除了當我想過早地結束功能?

+1

將'return;'放在返回'void'的函數末尾是沒有區別的。這與遞歸無關,它總是如此。 –

+0

嗯。在那個代碼中,最後一個'return;'永遠不會到達,不是嗎?但無論如何,這句話在「空白」功能中是沒有必要的。 – Tarod

+1

請參閱[返回void函數的目的是什麼](http://stackoverflow.com/q/18638286/1708801) –

回答

4

對於void返回函數,不,它沒有區別。但是,如果函數預期返回任何內容但是void,則需要爲所有代碼路徑包含有效的return

+0

沒有任何代碼路徑可以超出調用'CountDown(N-1)' – user463035818

+0

的範圍,當然你的答案當然仍然是正確的,我只是認爲有人可能會誤解它 – user463035818

+0

@ tobi303爲什麼不呢?我的意思是當(n == 0)的情況下,該函數將返回到函數CountDown(1),然後返回;語句會執行正確嗎?調用CountDown(0)部分之後。 – user2546419

2

void函數控制的末尾自動返回到調用函數,因此最後不需要return;return in一個void函數用於在函數正常之前退出該函數,如果在if語句中。

如果你有一個函數應該返回一個值,那麼不是那麼undefined behavior