2016-03-05 121 views
0

給定以下函數定義,呼叫dub(2.0, 4)返回什麼值?爲什麼有無限遞歸?

double dub(double z, int n) { 
    if (z == 0) return z; 
    return 2 * dub(z, n-1); 
} 
+5

在調試支出60秒會相當明確。學習如何使用它是一個非常好的主意,所以你可以自己把這些事情弄清楚。 –

回答

0

什麼樣的價值是通過調用dub(2.0, 4)返回?

它不會返回,更不用說返回任何值。

原因是z永遠不會變成0,所以你的基本情況永遠不會變成真,因此函數永遠不會返回。所以它會被無限次地調用,你已經看到了你的標題所說的。遞歸函數在到達基本情況時結束,在您的情況下基本情況永遠不會實現。

閱讀關於遞歸:


可能這就是你原本打算:

double dub(double z, int n) { 
    if (n == 0) return z; // checking if n is 0, instead of z 
    return 2 * dub(z, n-1); 
} 
+0

謝謝,這很有幫助))你叫什麼名字? –

+0

@CynthiaGarcia歡迎您!如果它對你有幫助,將其標記爲已接受(點擊答案旁邊的空白記號)! :)接受答案也會增加你的聲望! –

0

你問題不是很清楚,你問「爲什麼這個函數導致無限遞歸?」如果是這樣的話,原因是你正在檢查邊緣條件中的錯誤值。該函數應該寫成這樣

double dub(double z, int n) { 
    if (n == 0) return z; 
    return 2 * dub(z, n-1); 
} 

noitice條件變更爲n == 0,而不是z == 0

+0

您可能想要編輯一些格式。你的結局大括號是懸掛:) –

+0

@Shadowfax很好的觀察 - 回答在手機上的麻煩哈哈 –