斐波那契的奇怪解决方案,需要解释

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 ... ?

old0 直到它到达默认参数的初始化(在第一次调用时),它递增到 1 并设置 [= 的原始值10=] 到 curr

所以 old1 并且 curr 在第一次调用时是 0,而 1+0 在第一次调用时是 1 , 然后它将是 1+0 用于下一次调用。

这有点令人困惑,因为在第一次调用时,old 最终落后于 curr,但总和当然是相同的。