斐波那契数列是C语言中一个经典问题,它指的是这样一个数列: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*),在这里我们要讲解它的两种实现方法。
1.斐波那契的递归
int Fib1(int n){//递归的实现
if(n==1)return 1;
if(n==2)return 1;
return Fib1(n-1)+Fib1(n-2);//递推方程
}
在写的时候,要注意斐波那契的初始条件,以及递推方程的限制条件。
2.斐波那契的非递归
int Fib2(int n){//非递归的实现
if(n==1)return 1;
if(n==2)return 1;
int f1,f2,f3;
f1=1,f2=1;
for(int i=3;i<=n;i++){
f3=f2+f1;
f1=f2,f2=f3;
}
return f3;
}
斐波那契的非递归是基于数列的基本规律来实现,在解决类似问题时也可以仿照着完成。
完整代码如下:
#include<stdio.h>
int Fib1(int n){//递归的实现
if(n==1)return 1;
if(n==2)return 1;
return Fib1(n-1)+Fib1(n-2);//递推方程
}
int Fib2(int n){//非递归的实现
if(n==1)return 1;
if(n==2)return 1;
int f1,f2,f3;
f1=1,f2=1;
for(int i=3;i<=n;i++){
f3=f2+f1;
f1=f2,f2=f3;
}
return f3;
}
int main(){
int n;
scanf("%d",&n);
printf("%d",Fib2(n));
}