php实现斐波那契数列以及由此引起的联想

   斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。————摘自百度百科

公式:

  F(n)=F(n-1)+F(n-2)

网上有太多实现斐波那契数列的方法了,这里就不引述,只写一下个人的实现方法,虽然不怎么严谨,但个人感觉还行,需要的朋友可以借鉴一下

php实现原理(当然也有其他的方式或者原理):

  构建数组,通过中间替换变量,求取数组的最后一个元素,循环添加到数组中

<?php
    /*
    *函数功能求出斐波那数列的最后一项的值
    *@param1 数列的第一个值 $one
    *@param2 数列的第二个值 $two
    *@parma3 数列的第n项,也是数列的元素个数,$n
    *返回值,斐波那数列的最后一项的值
    */
    function Fobb($one,$two,$n){
        //不是整数则返回false,这里只考虑整数的情况
        if(!is_int($one) || !is_int($two)) return false;
        if(!is_int($n) || $n < 2) return false;//判断$n是否为正整数
        //初始化斐波那契数列
        $arr = array($one,$two);
        //初始化最后一项的值
        $j = $two;
        //循环添加斐波那契数列的元素
        for($i=0;$i<$n-2;$i++){
            $j= $arr[$i] + $j;
            //把最后一项添加数列的尾部
            array_push($arr,$j);
        }
        return $j;
    }
    var_dump(Fobb(0,1,60));//32位系统的超过2147483647就转为float类型

根据这个中间替换变量,循环添加数组元素的方式,我们也可以用它来实现阶乘

<?php
//求一个整数的阶乘
function factorial($n){
    if(!is_int($n) || $n<0) return false;
    //初始化阶乘数组
    $arr = array($n);
    //初始化阶乘的值
    $j = 1;
    for($i=0;$i<$n;$i++){
        //利用阶乘公式求阶乘的值,保存在中间中间变量$j中
        $j = $j*($n-$i);
        array_push($arr,$j);
    }
    return $j;
}
var_dump(factorial(1));

结语:

利用这个中间替代变量的方法实现一些程序功能,我想这是一个非常有用的程序思维,这是我实现斐波那契数列数列求值所获得的东西

时间: 2024-12-07 04:34:04

php实现斐波那契数列以及由此引起的联想的相关文章

用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)

费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数.斐波那契数列.费氏数列.黄金分割数列. 在数学上,费波那契数列是以递归的方法来定义: {\displaystyle F_{0}=0} {\displaystyle F_{1}=1} {\displaystyle F_{n}=F_{n-1}+F_{n-2}}(n≧2) 用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出.首几个费波那契系数是: 0, 1, 1, 2, 3

Fibonacci斐波拉契数列----------动态规划DP

n==10 20 30 40 50 46 体验一下,感受一下,运行时间 #include <stdio.h>int fib(int n){ if (n<=1)     return 1; else            return fib(n-1)+fib(n-2); }int main( ){ int n; scanf("%d",&n); printf("%d\n" ,fib(n) );} 先 n==10 20 30 40 50 46

《剑指Offer》题目——斐波拉契数列

题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.(n<=39) 题目分析:如果使用简单的递归,很容易造成栈溢出.采用递推的方式即可. 代码: public class Fibonacci { public static int fibonacci(int n){ int res[] = new int[2]; res[0]=1; res[1]=1; int temp = 0; if(n==0) return 0; if(n<=2) return res[

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

斐波那契数列

前几天学了javascript,挺难的比之前学的H5难多了,之前还觉得H5很难,一比较之下就相形见绌了. 在JS里面代码什么的还是蛮简单的,就是逻辑问题让你绕不过来....在这些逻辑问题里又有一个既难而且十分经典的问题,那就是斐波那契数列. 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34

斐波那契数列(分析别人的代码)

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这个数列从第3项开始,每一项都等于前两项之和. n1 = 0 #给n1赋初始值 n2 = 1 #给n1赋初始值 count = 0 #给计数器初始值 while count < 10: #循环条件为计数器小于10 nth = n1 + n2 #n

快速求斐波那契数列(矩阵乘法+快速幂)

斐波那契数列 给你一个n:f(n)=f(n-1)+f(n-2) 请求出 f(f(n)),由于结果很大请 对答案 mod 10^9+7; 1<=n<=10^100; 用矩阵乘法+快速幂求斐波那契数列是经典应用: 矩阵公式 C i j=C i k *C k j; 根据递推式 构造2*2矩阵: 原始矩阵 1 0 0 1 矩阵 2 1 1 1 0 原始矩阵与矩阵 2相乘达到转化状态效果: 对矩阵二进行快速幂 乘法:达到快速转化矩阵的效果: 即使达到快速转化状态:那么大的数据范围也很难求解: 高精?这有

每日一九度之 题目1075:斐波那契数列

时间限制:5 秒 内存限制:32 兆 特殊判题:否 提交:3517 解决:2028 题目描述: 编写一个求斐波那契数列的递归函数,输入n值,使用该递归函数,输出如样例输出的斐波那契数列. 输入: 一个整型数n 输出: 题目可能有多组不同的测试数据,对于每组输入数据, 按题目的要求输出相应的斐波那契图形. 样例输入: 6 样例输出: 0 0 1 1 0 1 1 2 3 0 1 1 2 3 5 8 0 1 1 2 3 5 8 13 21 0 1 1 2 3 5 8 13 21 34 55 这题可以直

递归与斐波那契数列

一.递归 在函数内部,可以调用其他函数;如果一个函数在内部调用自己,那这个函数就是递归函数. 案例:遍历当前目录下的所有文件 1.递归遍历 1 import os 2 def gci(filepath): 3 #遍历filepath下所有文件,包括子目录 4 files = os.listdir(filepath) 5 for fi in files: 6 fi_d = os.path.join(filepath,fi) 7 if os.path.isdir(fi_d): 8 gci(fi_d)