我正在閱讀 Eloquent Javascript 書,其中一個練習是通過創建遞回函式來計算一個數字是奇數還是偶數。
我的代碼是這樣的:
function isEven(n) {
if (n == 0)
return true;
else if (n == 1)
return false;
else
isEven(n - 2);
}
運行console.log(isEven(50));時它給我一個輸出undefined。當然解決辦法是return在前面放一個isEven(n - 2);
但是,為什么函式不應該回傳真或假?如何n變得未定義?
uj5u.com熱心網友回復:
因為假設您呼叫 isEven(3),然后在該函式內部呼叫 isEven(3-1),它的計算結果為 false,但您沒有從 isEven(3) 回傳該值
uj5u.com熱心網友回復:
您撰寫的代碼將:
- 回傳真
- 回傳假
- 遞回呼叫自身,并最終回傳,
undefined因為沒有return觸發任何陳述句
如果你想用遞回呼叫函式得到的值做某事,那么你需要撰寫代碼來做那件事。
因此需要return
uj5u.com熱心網友回復:
說 n = 3。你希望你的函式回傳 false
對 isEven 進行了三個呼叫。這些呼叫中的每一個都需要將某些內容回傳給呼叫它的物件。從最外面的呼叫到最里面的呼叫,它們看起來像:
輸出“假”<-回傳isEven(3)<-回傳isEven(1)<-回傳假
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513467.html
標籤:javascript递归
上一篇:如何遞回地思考`msort`函式
