給定以下函數定義,呼叫dub(2.0, 4)
返回什麼值?爲什麼有無限遞歸?
double dub(double z, int n) {
if (z == 0) return z;
return 2 * dub(z, n-1);
}
給定以下函數定義,呼叫dub(2.0, 4)
返回什麼值?爲什麼有無限遞歸?
double dub(double z, int n) {
if (z == 0) return z;
return 2 * dub(z, n-1);
}
什麼樣的價值是通過調用
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);
}
謝謝,這很有幫助))你叫什麼名字? –
@CynthiaGarcia歡迎您!如果它對你有幫助,將其標記爲已接受(點擊答案旁邊的空白記號)! :)接受答案也會增加你的聲望! –
你問題不是很清楚,你問「爲什麼這個函數導致無限遞歸?」如果是這樣的話,原因是你正在檢查邊緣條件中的錯誤值。該函數應該寫成這樣
double dub(double z, int n) {
if (n == 0) return z;
return 2 * dub(z, n-1);
}
noitice條件變更爲n == 0
,而不是z == 0
您可能想要編輯一些格式。你的結局大括號是懸掛:) –
@Shadowfax很好的觀察 - 回答在手機上的麻煩哈哈 –
在調試支出60秒會相當明確。學習如何使用它是一個非常好的主意,所以你可以自己把這些事情弄清楚。 –