递归及递归优化

303 阅读1分钟

常见的递归

1.阶乘

    function factorial(n) {
        if(n <= 1) return 1
        return n * factorial(n - 1)
    }

2.斐波那契数列

    function fibonacci(n) {
        if(n <= 2) return 1
        return fibonacci(n - 1) + fibonacci(n - 2)
    }

尾递归

递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误,但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。

1.阶乘递归的优化

    function factorial(n, total) {
      if (n === 1) return total;
      return factorial(n - 1, n * total);
    }

2.斐波那契数列递归的优化

    function fibonacci (n , ac1 = 1 , ac2 = 1) {
      if( n <= 1 ) {return ac2};
      return Fibonacci (n - 1, ac2, ac1 + ac2);
    }

3.未完待续...