php實現斐波那契數列的三種方法,遞歸回調和迭代器和數組之間性能對比

下面分別是用迭代器實現斐波那契數列和用遞歸回調實現的代碼

<?php
class fibonacci implements Iterator{
        private $key=0;
        private $value=array(0=>0,1=>1);
        public function __construct(){
            $this->key=0;
        }
        public function rewind(){
            $this->key++;
        }
        public function key(){
            return $this->key;
        }
        public function current(){
            return $this->value[$this->key];
        }
        public function next(){
            $this->value[++$this->key]=$this->value[$this->key-2]+$this->value[$this->key-1];
            return true;
        }
        public function valid(){
            return isset($this->value[$this->key]);
        }
    }

    $starttime=microtime();
    $fibonacci=new fibonacci(); 
    foreach ($fibonacci as $key => $value) {
        if($key==100){
            echo $value."<BR>";
            break;
        }
    }
    $endtime=microtime();
    echo $endtime-$starttime;
    echo "<BR>";


    function fibonacci2($n,$a=1,$beforebefore=0,$before=1){
        if($n==$a)
            return $before;
        return function()use($n,$a,$beforebefore,$before){
            return fibonacci2($n,++$a,$before,$before+$beforebefore);
        };
    }
    function trampoline($callback,$param){
        $result=call_user_func_array($callback,$param);
        while(is_callable($result)){
            $result=$result();
        }
        return $result;
    }
    $starttime=microtime();
    echo trampoline('fibonacci2',array(100))."<BR>";
    $endtime=microtime();
    echo $endtime-$starttime;
    ?>
而在瀏覽器中測試效果是這樣的:

可以看到遞歸回調所花的時間是0.005662
迭代器實現所花的時間是0.009785
從這我們可以看出顯然遞歸回調所花的時間更少,性能更好,但是其中的原理仍在探討中.....
但是實際上效率最高的是用數組,這個刷過題的應該都知道吧
$starttime=microtime();
    $arr[0]=0;
    $arr[1] = 1;
    for($i = 2;$i <= 100;$i++)
    {
        $arr[$i] = $arr[$i-1] + $arr[$i-2];
    }
    echo $arr[100]."<BR>";
    $endtime=microtime();
    echo $endtime-$starttime;
下面來看看實際時間對比
顯然數組的效率比前兩種都高很多


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章