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

时间:2018-01-28 17:21:15

标签: javascript algorithm fibonacci

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

1 个答案:

答案 0 :(得分:3)

  

为什么这个功能显示1 1 2 ..而不是1 2 3 ......?

old0,直到初始化默认参数(在第一次调用时),将其递增到1并设置{{1}的原始值到old

首次通话时currold1curr,第一次通话为01+0,那么下次通话时会1

这有点令人困惑,因为在第一次通话时,1+0最终落后于old,但总和当然是相同的。