zoukankan      html  css  js  c++  java
  • 使用尾递归对斐波那契优化?

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

    // 传统递归斐波那契, 会造成超时或溢出
    function Fibonacci (n) {
      if ( n <= 1 ) {return 1};

      return Fibonacci(n - 1) + Fibonacci(n - 2);
    }

    Fibonacci(10) // 89
    Fibonacci(100) // 超时
    Fibonacci(500) // 超时

    // 使用尾递归优化, 可规避风险
    function Fibonacci2 (n , ac1 = 1 , ac2 = 1) {
      if( n <= 1 ) {return ac2};

      return Fibonacci2 (n - 1, ac2, ac1 + ac2);
    }

    Fibonacci2(100) // 573147844013817200000
    Fibonacci2(1000) // 7.0330367711422765e+208
    Fibonacci2(10000) // Infinity

    Java Program!
  • 相关阅读:
    Oracle expdp 多表导出处理
    字符串
    Java设计模式
    多线程
    Java面向对象练习
    Java面向对象基础
    Java基础算法
    Java常识
    DOS基础命令(1)
    Java基础练习
  • 原文地址:https://www.cnblogs.com/programb/p/14068884.html
Copyright © 2011-2022 走看看