标签:
---恢复内容开始---
在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
据此
#include<stdio.h> long fib(int n){ return n<2? 1:fib(n-1)+fib(n-2); } int main(){ int n; scanf("%d",&n); printf("%ld\n",fib(n)); return 0; }//但,会出现重复计算,例如fib(5)=fib(4)+fib(3),fib(4)=fib(3)+fib(2)...据此判断递归过程像满二叉树,也就是说很有很多重复计算,速度很慢。
迭代:
#include<stdio.h> long fib(int n){ long f0=0,f1=1,f2,i; if(n<=1) return 1; for(f2=f0+f1,i=2;i<n;i++){ f0=f1,f1=f2; f2=f1+f0; } return f2; } int main(){ int n; scanf("%d",&n); printf("%ld\n",fib(n)); return 0; }
另一种递归:
#include<stdio.h> long fib(long f1,long f0,int n){ return n<=0? f0:fib(f0+f1,f1,n-1); } int main(){ int n; scanf("%d",&n); printf("%ld\n",fib(1,1,n)); return 0; }
---恢复内容结束---
标签:
原文地址:http://www.cnblogs.com/wqkant/p/5369778.html