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!
  • 相关阅读:
    select入门学习
    tomcat入门及相关学习
    Tomcat&Servlet
    CPU排行榜
    CPU后字母代表的含义
    刷 BIOS
    Java的三个体系
    XML入门及案例
    BootStrap笔记
    第三节 DOM及案例 表格全选、表单验证
  • 原文地址:https://www.cnblogs.com/programb/p/14068884.html
Copyright © 2011-2022 走看看