我对fibonacci算法的首次实现是:
function fibo(max, old = 0, curr = 1) {
if( old === 0 && curr === 1 ) { console.log(curr) }
if(curr + old < max) {
console.log( curr + old);
fibo(max, curr, old + curr);
}
}
fibo(50);
我正在使用javascript中的斐波纳契算法,我偶然发现了一个奇怪但更整洁的解决方案,我无法解释:
function fibo(max, old = 0, curr = old++) {
if(curr + old < max) {
console.log( curr + old);
fibo(max, curr, old + curr);
}
}
fibo(50);
为什么这个功能显示1 1 2 ..而不是1 2 3 ......?
答案 0 :(得分:3)
为什么这个功能显示1 1 2 ..而不是1 2 3 ......?
old
为0
,直到初始化默认参数(在第一次调用时),将其递增到1
并设置{{1}的原始值到old
。
首次通话时curr
为old
,1
为curr
,第一次通话为0
为1+0
,那么下次通话时会1
。
这有点令人困惑,因为在第一次通话时,1+0
最终落后于old
,但总和当然是相同的。