zoukankan      html  css  js  c++  java
  • 斐波那契数列的递归实现以及优化

    <?php
    // 优化前
    function fb($len) {
        if ($len < 3) return 1;
        return fb($len - 2) + fb($len-1);
    }
    
    // 优化以后
    function fb($len) {
        static $cache = [];
        if ($len < 3) return 1;
        if (key_exists($len, $cache)) {
            return $cache[$len];
        } else {
            $fb =  fb($len - 2) + fb($len-1);
            $cache[$len] = $fb;
            return $fb;
        }
    }
    

      主要原因:在递归调用时出现了大量的重复计算,故可以将单次递归结果保存在一个变量中,每次递归时查询是否存在,存在即返回

    <?php
    function  fb2($n=1, $a =1, $b=1){
      if ($n > 2) {
        // 存储前置变量
        return fb2($n-1, $a+$b, $a);
      }
      return $a;
    }
    var_dump(fb2(3));
    

      

  • 相关阅读:
    TypeScript 函数
    单链表 C++
    测试用例概念 原则
    TypeScript 类
    TypeScript 接口
    Cellection
    面向对象
    反射
    B树
    无权无向图
  • 原文地址:https://www.cnblogs.com/jasonyou/p/13594197.html
Copyright © 2011-2022 走看看