JavaScript fibonacci使用递归

Bra*_*ent 3 javascript recursion fibonacci

试图让我的斐波那契序列使用递归工作,但我遇到了错误maximum callstack exceeded.

码:

var genFib = function(count, limit, fibArray) {
  if (count === undefined || count === null) {
    var count = 0;
  }

  if (fibArray === undefined || fibArray === null) {
    var fibArray = [0, 1];
  }

  if (count === limit) {
    console.log(fibArray);
    return fibArray;
  }

  var pushFibNo = function(fibArray) {
    fibArray.push(fibArray[fibArray.length - 1] + fibArray[fibArray.length - 2]);
    return fibArray;
  };

  // console.log(count++);
  // console.log(limit);
  // console.log(pushFibNo(fibArray));

  return genFib(count++, limit, pushFibNo(fibArray));

};

genFib(null, 50, null);
Run Code Online (Sandbox Code Playgroud)

console.logs向下的三个正在记录正确的数字,但我仍然得到maximum callstack错误.

mon*_*ish 12

++后缀和前缀表示法的行为不同.

来自MDN:

如果使用postfix,操作符后面的运算符(例如,x ++),则它在递增之前返回值.

如果在操作数之前使用了带运算符的前缀(例如,++ x),则在递增后返回该值.

这意味着count在递增之前总是会传递,从而导致堆栈溢出.

要解决您的问题,请更改

return genFib(count++, limit, pushFibNo(fibArray));
Run Code Online (Sandbox Code Playgroud)

return genFib(++count, limit, pushFibNo(fibArray));
Run Code Online (Sandbox Code Playgroud)