爲了更好地理解遞歸,我試圖弄清楚如何將遞歸跟蹤記錄到控制檯。我有'追蹤'部分,但我不確定如何「解決」這個問題。對完美放置console.log語句的任何建議?如何打印遞歸軌跡(階乘函數)?
這裏是我到目前爲止有:
function factorial (num) {
if (num === 1) {
console.log('factorial(' + num + ') = ' + num);
return 1;
} else {
console.log('factorial(' + num + ') = ' + num + ' * ' + 'factorial(' + (num - 1) + ')');
return num * factorial(num - 1);
}
}
它打印以下控制檯:
factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1
120
但大約1 * 2 * 3 * 4 * 5的部分是什麼?我知道它發生在那裏,我怎麼打印它?
我猜我希望它看起來像這樣:
1
1 * 2
2 * 3
6 * 4
24 * 5
120
感謝您的任何建議!
經過搜索,我發現這個過在CodeRanch,不幸的是SANS代碼(用Java編寫的)OK:
Enter fact(6)
Enter fact(5)
Enter fact(4)
Enter fact(3)
Enter fact(2)
Enter fact(1)
Enter fact(0)
0!Ret: 1
Ret: 1 * fact(n-1) = 1 * fact(0) = 1 * 1 = 1
Ret: 2 * fact(n-1) = 2 * fact(1) = 2 * 1 = 2
Ret: 3 * fact(n-1) = 3 * fact(2) = 3 * 2 = 6
Ret: 4 * fact(n-1) = 4 * fact(3) = 4 * 6 = 24
Ret: 5 * fact(n-1) = 5 * fact(4) = 5 * 24 = 120
Ret: 6 * fact(n-1) = 6 * fact(5) = 6 * 120 = 720
fact(6) = 720
很酷,不是嗎?經過更多的嘗試,我仍然無法實現這個雖然...
你能後你期望的輸出的例子嗎?你也可以簡單地記錄一次語句的階乘。 – elclanrs
剛剛添加我的預期輸出:) –
找到答案,我已經提到。 它應該工作。 –