function fs(n){
if(n ===1 || n ===2){
return 1;
}
return fs(n - 1) + fs(n - 2)
}
console.log(fs(6)) //輸出結果為8
遞回函式是一直執行到符合設定的條件時才會停止,這里設定了當n等于1或2的時候就會回傳一個1,函式是先計算完前面的值才會計算后面的值,
①:fs(6) = fs(5)+fs(4), 后面的fs(4)先不執行,先執行前面的fs(5)
②:fs(5) = fs(4)+fs(3), 后面的fs(3)先不執行,先執行前面的fs(4)
③:fs(4)= fs(3)+fs(2), 后面的fs(2)先不執行,先執行前面的fs(3)
④:fs(3) = fs(2)+fs(1), 后面的fs(1)先不執行,先執行前面的fs(2)
函式fs(2) 運行時符合判斷陳述句 , 回傳 ‘1’,
到此前面的fs函式已經計算完了,開始計算后面的fs函式
執行序號④后面的fs(1)函式,符合判斷陳述句,回傳 ‘1’
接著執行序號③后面的fs(2)函式,符合判斷陳述句,回傳 ‘1’
執行序號②后面的fs(3)函式,不符合判斷陳述句,繼續向下執行
⑤:fs(3) = fs(2) + fs(1), 后面的fs(1)先不執行,先執行前面的fs(2)
fs(2)函式符合判斷陳述句條件,回傳 ‘1’
執行序號⑤后面的fs(1),符合判斷條件,回傳 ’1‘
接著執行序號①后面的fs(4)函式
⑥:fs(4) = fs(3) + fs(2) 同上
⑦:fs(3) = fs(2) + fs(1)
運行fs(2) 符合判斷陳述句,回傳 ’1‘
執行序號⑦后面的fs(1)函式,符合條件,回傳 ‘1’
最后是序號⑥后面的fs(2)函式,符合條件,回傳 ‘1’,整個函式運行完畢
把所有回傳的1加起來就等于輸出結果8了
fs(6) = fs(5) + fs(4)
fs(5) = fs(4) + fs(3)
fs(4) = fs(3) + fs(2)
fs(3) = fs(2) + fs(1)
fs(2) return 1;
fs(1) return 1;
fs(2) return 1;
fs(3) = fs(2) + fs(1)
fs(2) return 1
fs(1) return 1
fs(4) = fs(3) + fs(2)
fs(3) = fs(2) + fs(1)
fs(2) return 1
fs(1) return 1
fs(2) return 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/207698.html
標籤:其他
