// program to count down numbers to 1
function countDown(number) {
// display the number
console.log(number);
// decrease the number value
const newNumber = number - 1;
// base case
if (newNumber > 0) {
countDown(newNumber);
}
console.log(newNumber);
}
countDown(4);
// output => 4 3 2 1 0 1 2 3
我無法想象 if 條件之后會發生什么。我的意思是我知道countDown(newNumber)存在“回圈”。但我不明白為什么會有輸出 0 1 2 3。我知道我可以放一個 else 關鍵字,但我想了解為什么 JS 引擎在完成遞回后會列印四次 console.log(newNumber)。
uj5u.com熱心網友回復:
您的遞回呼叫不會結束函式的執行。
所以發生的情況是,如果你呼叫newNumber(2)它執行第一個 console.log,記錄 2。然后它分配newNumber給 1。然后你的遞回發生,列印 1。在遞回呼叫中 newNumber 變為 0,所以不再遞回。相反,遞回內的第二個列印列印 0。現在您的遞回回傳,遞回外部的第二個列印列印newNumber非遞回呼叫中的當前值。那是1。
所以你得到 2 (外部遞回) 1 (內部) 0 (內部) 1 (外部)
uj5u.com熱心網友回復:
這可能會幫助您形象化:
http://latentflip.com/loupe/?code=Ly8gcHJvZ3JhbSB0byBjb3VudCBkb3duIG51bWJlcnMgdG8gMQ0KZnVuY3Rpb24gY291bnREb3duKG51bWJlcikgew0KDQogIC8vIGRpc3BsYXkgdGhlIG51bWJlcg0KICBjb25zb2xlLmxvZyhudW1iZXIpOw0KDQogIC8vIGRlY3JlYXNlIHRoZSBudW1iZXIgdmFsdWUNCiAgY29uc3QgbmV3TnVtYmVyID0gbnVtYmVyIC0gMTsNCg0KICAvLyBiYXNlIGNhc2UNCiAgaWYgKG5ld051bWJlciA+IDApIHsNCiAgICAgIGNvdW50RG93bihuZXdOdW1iZXIpOw0KICB9DQogIGNvbnNvbGUubG9nKCdwb3RhdG9zJykNCiAgY29uc29sZS5sb2cobmV3TnVtYmVyKTsNCn0NCiANCmNvdW50RG93big0KTsg!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4=
uj5u.com熱心網友回復:
您可以簡化您的功能。
function countDown(number) {
if (number > 0) {
console.log(number);
countDown(--number);
}
}
countDown(4);
uj5u.com熱心網友回復:
這邊走 ?
countDown( 4 )
// program to count down numbers to 1
function countDown(num)
{
if (num<1) return
console.log(num)
countDown(--num)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/429508.html
標籤:javascript 功能 递归
