斐波那契函数.

<?php
//数组版
function fib($n){
$array = array();
$array[0]=0;
$array[1]=1;
for($i=2;$i<=$n;$i++){
$array[$i]= $array[$i-1]+$array[$i-2];
}
print_r($array);

}
fib(10);

echo "<hr>";

//普通版
function fib2($n){
if($n==1||$n==2){return 1;}
else{
return fib2($n-1)+fib2($n-2);
}
}
echo fib2(10);
?>
时间: 2024-10-12 19:31:04

斐波那契函数.的相关文章

简单东西-斐波那契函数实现

CSDN首页的极客头条里看到一个问题,实现斐波那契函数,并且计算n等于100时的函数值.简单地想了下,所能想到的就是使用递归完成.用递归实现,测试发现递归效率非常低,尤其是当计算的N稍微大点时,计算N=100差不多耗费了3000秒.而且需要考虑长度问题,返回值不能用int,溢出的临界是N=50. 无意中逛CSDN的问答频道,恰好也看到一个斐波那契函数的问题,而且不是用递归而是用临时中间变量存储每次计算得到的中间值,测试发现这比递归快多了,计算N=100,瞬间出结果. 三种实现方法如下: publ

斐波那契函数的应用

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙上一次n级的台阶总共有多少种跳法? 分析:首先考虑最简单的额情况.如果只有1级台阶,那显然只有一种跳法:如果有2级台阶,那就有两种跳法:跳一级再跳一级:一次性跳到第2级: 接下来讨论一般情况,把n级台阶时的跳法看成是n的函数:记作f(n).当n > 2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的数目:即为f(n-1): 另一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级数台阶

04斐波那契函数_Fibonacci--(栈与队列)

#include "stdio.h" int Fbi(int i) /* 斐波那契的递归函数 */ { if( i < 2 ) return i == 0 ? 0 : 1; return Fbi(i - 1) + Fbi(i - 2); /* 这里Fbi就是函数自己,等于在调用自己 */ } int main() { int i; int a[40]; printf("迭代显示斐波那契数列:\n"); a[0]=0; a[1]=1; printf("

斐波那契函数的优化

Android开发者使用java开发,但是Android平台并没有使用java虚拟机来执行代码,而是把代码编译成Android使用的虚拟机的字节码(Dalvik 虚拟机).java代码先是被编译成了java的字节码,然后会被odex 编译器编译成delvik虚拟机执行的字节码.无论是Android中还是java中程序的性能优化都是必不可少的一大难题.我们先从简单的斐波那契数列来简做分析: 1.什么是斐波那契数列? a)?例如 0 ?1 ?2 ?3 ?5 ?8 ?13 ..... 这样的数列.第一

高级算法——动态规划(斐波那契函数实例)

//使用递归去解决问题虽然简洁, 但效率不高,转为动态规划较好 function recurFib(n) {//斐波那契数列——递归 if (n <= 2) { return 1; } else { return recurFib(n - 1) + recurFib(n - 2); } } function dynFib(n) {//斐波那契数列——动态规划 var val = []; if (n == 1 || n == 2) { return 1; } else { val[1] = 1;

谨慎地使用递归之斐波那契递归实现的分析

[斐波那契函数的定义] 斐波那契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=1,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*). [用递归求解斐波那契函数的弊端] 斐波那契函数用递归实现如下面的代码: 计算斐波那契的自然递归程序效率时很低的,上面的程序虽然写法简单,看上去时递归的聪明的使用,但其实效率是及其低下的.特别是当n=40以后,效率衰减的特别明显.为了计算 fib( n ) ,

蓝桥杯 历届试题 斐波那契

困扰我N天的一题,今天终于解决了.话不多说,直接上题. 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 n 和 m,我们希望求出: f(1) + f(2) + ... + f(n) 的值.但这个值可能非常大,所以我们把它对 f(m) 取模. 公式如下 但这个数字依然很大,所以需要再对 p 求模. 输入格式 输入为一行用空格分开的整数 n m p (0 < n, m

c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)

写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include<stdio.h> int fibonacci(int n) { int num1=1, num2=1, num3=0,i; if (n <= 2) { printf("斐波拉契数列的第%d项为:%d\n",n,num1); } else { for (i = 2; i <

----斐波那契数列---eval函数----类递归思想 栈 进出 思想

------------ 斐波那契 数列 --------------- [1,1,2,3,5,8,13,21,34,...] 1 列表方法实现 # l=[1,1] # # # while len(l)<=20: # # l.append(l[-1]+l[-2]) # # print(l) # # while len(l)!=4: # l.append(l[-1]+l[-2]) # print(l) # 2 迭代实现 # n=10 # # n1 = 1 # n2 = 1 # n3 = 1 # #