斐波那契數列的遞歸實現以及優化


<?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));

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM