首页 > 代码库 > 费波那契数列算法
费波那契数列算法
费波那契数列算法
作者:白宁超
2016年10月27日20:06:54
斐波那契数学描述:
F0 = 0 (n=0)
F1 = 1 (n=1)
Fn = F[n-1]+ F[n-2](n=>2)
Python语言实现:
分析:当n=0时为0,n=1时为1,n>2时,最后两数之和。由此可知,链表fibs初始化0,1;列表可以当做链表使用,具有负数索引特性,采用后两位数相加追加即可。
import datetime#由于斐波那契特性前两首0,1,其后各项均为之前两数之和可知,时间复杂度O(n)def fib(n):fibs=[0,1]for i in range(n-2): #开始两项已知fibs.append(fibs[-2]+fibs[-1])return fibs[-1]#迭代实现,时间复杂度O(n)def fib1(n):a,b = 0,1for i in range(n-1):a,b= b,a+breturn a #递归算法实现,其中n=0返回0,n=1返回1,n>=2返回之前两项之和,时间复杂度O(nlgn)def fib12(n):if n == 0:return 0elif n == 1:return 1else:return fib1(n-2)+fib1(n-1)# 递归进行初始化O(nlgn)def fib3(n):init = {0: 0, 1: 1}if not n in init:init[n]=fib2(n-2)+fib2(n-1)return init[n] print(datetime.datetime.now())#print("1\t"+str(fib(10000))) #0.1Sprint(datetime.datetime.now())print("2"+str(fib3(10000))) #0.8sprint(datetime.datetime.now())#print("3\t"+str(fib1(30))) #3.4sprint(datetime.datetime.now())#print("4\t"+str(fib2(30)) #7.1sprint(datetime.datetime.now())
Java代码实现:
class Ideone{public static void main (String[] args) throws java.lang.Exception{int fibnum=fib1(1000);System.out.println(fibnum);}//递归算法public static int fib(int n){if(n==0) return 0;else if(n==1) return 1;else return fib(n-1)+fib(n-2);}
//非递归算法public static int fib1(int n){int a=0,b=1,temp=0;for(int i=0;i<n;i++){temp=a;a=(a+b);b=temp;}return a;}}
C语言代码实现:
#include <stdio.h>int fib(int n);int main(void) {// your code goes hereint fibnum=fib1(10);printf("%d",fibnum);return 0;}
//递归算法int fib(int n){if(n==0) return 0;else if (n==1) return 1;else return fib(n-1)+fib(n-2);}
//非递归算法int fib1(int n){int a=0,b=1,temp=0;for(int i=0;i<n;i++){temp=a;a=(a+b);b=temp;}return a;}
C#代码实现:
public class Test{public static void Main(){// your code goes hereint fibnum=fib1(10);Console.WriteLine(fibnum);}
//递归算法public static int fib(int n){if(n==0) return 0;else if(n==1) return 1;else return fib(n-1)+fib(n-2);}
//非递归算法public static int fib1(int n){int a=0,b=1,temp=0;for(int i=0;i<n;i++){temp=a;a=(a+b);b=temp;}return a;}}
费波那契数列算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。