【算法】费波那契数列算法
费波那契数列算法
作者:白宁超
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;列表可以当做链表使用,具有负数索引特性,采用后两位数相加追加即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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,1 for i in range(n-1): a,b= b,a+b return a #递归算法实现,其中n=0返回0,n=1返回1,n>=2返回之前两项之和,时间复杂度O(nlgn) def fib12(n): if n == 0: return 0 elif n == 1: return 1 else : 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.1S print(datetime.datetime.now()) print( "2" +str(fib3(10000))) #0.8s print(datetime.datetime.now()) #print("3\t"+str(fib1(30))) #3.4s print(datetime.datetime.now()) #print("4\t"+str(fib2(30)) #7.1s print(datetime.datetime.now()) |
Java代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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); }<br> //非递归算法 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语言代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> int fib( int n); int main( void ) { // your code goes here int fibnum=fib1(10); printf( "%d" ,fibnum); return 0; }<br> //递归算法 int fib( int n){ if (n==0) return 0; else if (n==1) return 1; else return fib(n-1)+fib(n-2); }<br><br> //非递归算法 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#代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class Test { public static void Main() { // your code goes here int fibnum=fib1(10); Console.WriteLine(fibnum); }<br> //递归算法 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); }<br><br> //非递归算法 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; } } |
作者:白宁超,工学硕士,现工作于四川省计算机研究院,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759 。
出处:http://www.cnblogs.com/baiboy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2015-10-27 java之文件基本操作