JS尾遞迴優化斐波拉契數列

AbleXu發表於2019-01-04
  • 正常的斐波拉契數列js實現方式

    const Fibonacci = (n) => {
        if (n <= 1) return 1;
        return  Fibonacci(n - 1) + Fibonacci(n - 2);
    }
    Fibonacci(10) // 89
    Fibonacci(40) // 165580141 計算緩慢有延遲了
    Fibonacci(100) // 棧溢位,無法得到結果複製程式碼
  • 使用尾遞迴優化該方法

    const Fibonacci = (n, sum1 = 1, sum2 = 1) => {
         if (n <= 1) return sum2;
         return Fibonacci(n - 1, sum2, sum1 + sum2)
    }
    Fibonacci(10) // 89
    Fibonacci(100) // 573147844013817200000 速度依舊很快
    Fibonacci(1000) // 7.0330367711422765e+208 還是沒有壓力複製程式碼

  • 尾遞迴優化可以在數量較大的計算中,可以起到很好的作用


相關文章