在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/PHP  HTML/ 不改變內(nèi)存限制用遞歸實現(xiàn)斐波拉契

不改變內(nèi)存限制用遞歸實現(xiàn)斐波拉契

實現(xiàn)斐波拉契數(shù)列,在用php中用遞歸的時候會出現(xiàn)超過限制內(nèi)存的錯誤提醒。
es6里面有尾遞歸優(yōu)化,php里面有什么優(yōu)化的方式么?

先貼兩種網(wǎng)上找到的解決方案,
第一種:http://blog.csdn.net/h3305319...
第二種:https://www.cnblogs.com/zhenb...
第一種利用高階函數(shù)回調(diào)方式經(jīng)過試驗還是不可以,不過第二種方案在實現(xiàn)過程中還是可以滿足的。
如下圖:

clipboard.png

好的 那么問題來了,
如何解決不改變內(nèi)存限制,利用遞歸實現(xiàn)?
第一種方案為何不行?
第二種為什么又可以了??

回答
編輯回答
解夏

//實現(xiàn)斐波拉契數(shù)列

function flist($limit){
    $pre1 = 1;
    $pre2 = 1;
    for ($i=0; $i <$limit ; $i++) {
        if($i<2){
            yield 1;
            continue;
        }
        $now = $pre2+$pre1;
        $pre2 = $pre1;
        $pre1 = $now;
        yield $now;
    }
}

$flist = flist(10);
foreach ($flist as $key => $value)
{
    echo $value . "\n";
}
2017年5月27日 09:56
編輯回答
綰青絲

可以使用 yield 協(xié)程調(diào)用來實現(xiàn)

2018年2月15日 15:48
編輯回答
離人歸

第二種方案使用全局變量$cache作為緩存,所以再遞歸中每一個n對應(yīng)的值只計算一遍,事實上計算fib(x)只會調(diào)用x次函數(shù),可以在很快的時間和很小的??臻g使用下完成。

2017年9月27日 08:19