关于递归返回值的一个问题

function fibonacciCatch(num) {
  let cache = [1, 1];
  (function fibonacci(n) {
    if(typeof cache[n] == 'number') {
      return  cache[n]
    } else {
      // 这里如果没有return为何不行
      return cache[n] = fibonacci(n - 1) + fibonacci(n - 2)
    }
  })(num - 1);
  return cache;
}
console.log(fibonacciCatch(4))   //[ 1, 1, 2, 3 ]

如果不写上面注释中的那个return ,那么会生成[1,1,2,NaN]
我的理解是那一句不就是相当于给数组的第n项复制嘛,赋值之后完全是可以再用来进行运算的,为何还要return 呢?
最近在初学算法,在递归这边有时候总是感觉绕不过来,请大佬帮忙解释详细些,谢谢啦

阅读 1.6k
评论
    6 个回答
    • 5.3k

    楼主应该说的是里面那一层灭有return的情况吧

    function fibonacciCatch(num) {
      let cache = [1, 1];
      (function fibonacci(n) {
        if(typeof cache[n] == 'number') {
          return  cache[n]
        } else {
          cache[n] = fibonacci(n - 1) + fibonacci(n - 2)
        }
      })(num - 1);
      return cache;
    }

    如果里面函数fibonacci没有返回值,那么在执行

    fibonacci(n - 1) + fibonacci(n - 2)

    这一句的时候,几回出现两个函数相加的情况,所以就返回NaN

    执行
    
    fibonacciCatch(6)
    
    输出
    
    [1, 1, 2, NaN, NaN, NaN]
      相似问题
      推荐文章