说明:

Fibonacci 为 1200 年代的欧洲数学家,在他的着作中曾经提到:若有一只免子每个月生一只小免子 , 一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产) ...... 。如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是 Fibonacci 数列,一般习惯称之为费氏数列,例如以下: 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34 、 55 、 89...... 


php代码实现如下:

<?php
class fibonacci implements Iterator
{ 
    private $previous = 0; 
    private $current = 1; 
    private $key = 0; 
    
    public function current() 
    { 
        return $this->current; 
    } 
    
    public function key() 
    { 
        return $this->key; 
    } 
    
    public function next() 
    { 
        // 关键在这里
        // 将当前值保存到  $newprevious
        $newprevious = $this->current; 
        // 将上一个值与当前值的和赋给当前值
        $this->current += $this->previous; 
        // 前一个当前值赋给上一个值
        $this->previous = $newprevious; 
        $this->key++; 
    } 
    
    public function rewind() 
    { 
        $this->previous = 0; 
        $this->current = 1; 
        $this->key = 0; 
    } 
    
    public function valid() 
    { 
        return true; 
    } 
} 

function main()
{
    $seq = new fibonacci; 
    foreach ($seq as $k=>$v) 
    { 
        echo ($k+1).' => '.$v."\n";
        if($k == 15)
        {
            break;    
        }
    }    
}

main();