用PHP迭代器来实现一个斐波纳契数列

斐波纳契数列通常做法是用递归实现,当然还有其它的方法。这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次。注释已经写到代码中,也是相当好理解的。

<?php
/*
*@author nicesunboy@gmail.com
*/
class Fibonacci implements Iterator {
    private $previous = 1;
    private $current = 0;
    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 = 1;
        $this->current = 0;
        $this->key = 0;
    } 

    public function valid() {
        return true;
    }
} 

$seq = new Fibonacci;
$i = 0;
foreach ($seq as $f) {
    echo "$f ";
    if ($i++ === 15) break;
}
?>

程序运行结果:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索递归
, 斐波那契数列
, 注释
, 方法
, 迭代
, 一个
, 斐波纳契数列
, PHP迭代器模式
, 斐波纳契
, 数列
斐波
斐波纳契数列、斐波纳契数列c语言、斐波纳契数列季刊、斐波纳契数列 c、java 迭代器实现,以便于您获取更多的相关知识。

时间: 2024-10-02 14:02:48

用PHP迭代器来实现一个斐波纳契数列的相关文章

打印菱形以及斐波纳契数列的几种解法介绍

1.编写程序,打印*菱形推出第i行要打印的空白个数及*号个数,用for循环依次打印各行 复制代码 代码如下: #include<stdio.h> //总共要打印2*n-1行,逐行打印 void print1(int n) { int i,j; for(i=1;i<=n;i++){//打印1至n行 for(j=1;j<=n-i;j++)//打印n-i个空格 printf(" "); for(j=1;j<=2*i-1;j++)//打印2*i-1个*号 prin

打印菱形以及斐波纳契数列的几种解法介绍_C 语言

1.编写程序,打印*菱形推出第i行要打印的空白个数及*号个数,用for循环依次打印各行 复制代码 代码如下: #include<stdio.h>//总共要打印2*n-1行,逐行打印void print1(int n){ int i,j; for(i=1;i<=n;i++){//打印1至n行  for(j=1;j<=n-i;j++)//打印n-i个空格      printf(" ");  for(j=1;j<=2*i-1;j++)//打印2*i-1个*号 

PHP迭代器实现斐波纳契数列的函数_php实例

复制代码 代码如下: class Fibonacci implements Iterator {     private $previous = 1;     private $current = 0;     private $key = 0;     public function current() {         return $this->current;     }     public function key() {         return $this->key;  

输出斐波那契数列的算法

斐波那契数列(Fibonacci polynomial),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.-- 要求编程输出这样的一组数,比如输出10个数的序列 /** * @param i 第n个数 * @param j 第n+1个数 * @param n 输出个数 */ public static void ff( int i,int j,int n){ int m=1; System.out.print(i+","); while(m++<n)

斐波那契数列和反向计算问题

反向计算:编写一个函数将一个整型转换为二进制形式 反向计算问题,递归比循环更简单 分析:需要理解,奇数的二进制最后一位是1,偶数的二进制最后一位一定是0,联想记忆,这个和整型的奇偶性是一致的,1本身就是奇数,0本身是偶数.     十进制整数转换为二进制整数采用"除2取余,逆序排列"法. 具体做法是:用2整除十进制整数,可以得到一个商和余数,再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,

斐波那契数列-有一对兔子

/************************************************************************************************  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,*  小兔子长到第三后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? *  1.程序分析: 兔子(对)的规律为数列1,1,2,3,5,8,13,21....* @param args* [斐波那契数列]*********

hdu 4549 M斐波那契数列

click here ~~ Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? Input 输入包含多组测试数据: 每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 ) Output 对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n

算法-斐波那契数列的性能优化

问题描述 斐波那契数列的性能优化 10C http://www.nowcoder.com/books/coding-interviews/c6c7742f5ba7442aada113136ddea0c3?rp=1 牛客网上 的这道题,一个简单的递归,性能不满足要求,请问 有什么提高性能的算法 解决方案 递归性能当然差了,解决档案是:将递归改为迭代! 解决方案二: 为啥不直接上通项公式 解决方案三: 这是我写的源代码.接下来我将对递归和迭代进行分析,我觉得这才是重点! 解决方案四: 在大部分情况下

基础-斐波那契数列 利用循环输出前40项 (初学者)

问题描述 斐波那契数列 利用循环输出前40项 (初学者) 我在查了资料之后找到以下解决方法: #include int main() { long fib[41] = {0,1}; int i; for (i=2;i<41;i++) fib[i] = fib[i-1]+fib[i-2]; for (i=1;i<41;i++) printf("F%d==%dn",i,fib[i]); getch(); return 0; } 有些看不懂,希望可以帮我详细分析一下运算过程,或者