斐波那契的奇怪解决方案,需要解释
Strange solution for fibonacci, explanation needed
我第一次实现斐波那契算法是:
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 ...?
why does this function display 1 1 2 .. and not 1 2 3 ... ?
old
是 0
直到它到达默认参数的初始化(在第一次调用时),它递增到 1
并设置 [= 的原始值10=] 到 curr
。
所以 old
是 1
并且 curr
在第一次调用时是 0
,而 1+0
在第一次调用时是 1
, 然后它将是 1+0
用于下一次调用。
这有点令人困惑,因为在第一次调用时,old
最终落后于 curr
,但总和当然是相同的。
我第一次实现斐波那契算法是:
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 ...?
why does this function display 1 1 2 .. and not 1 2 3 ... ?
old
是 0
直到它到达默认参数的初始化(在第一次调用时),它递增到 1
并设置 [= 的原始值10=] 到 curr
。
所以 old
是 1
并且 curr
在第一次调用时是 0
,而 1+0
在第一次调用时是 1
, 然后它将是 1+0
用于下一次调用。
这有点令人困惑,因为在第一次调用时,old
最终落后于 curr
,但总和当然是相同的。