#include<stdio.h>
//求斐波那契数列的第n项
//递归复杂度高,不推荐使用
int vibonaqiI(int n);
int vibonaqiII(int n);
int main(){
while(1){
int n = 0;
printf("请输入一个数字:\n");
scanf("%d",&n);
if(n == 886){
break;
}
int result = vibonaqiII(n-1);//时间复杂度为O(n);
// int result = vibonaqiI(n-1);//时间复杂度为O(2^n)
printf("第%d项为:%d\n",n,result);
}
printf("再见\n");
return 0;
}
//递归实现
int vibonaqiI(int n){
if(n<=0){
return 0;
}
else if(n<=2){
return 1;
}
else{
return vibonaqiI(n-1)+vibonaqiI(n-2);//每次都会执行到方法能返回一个数,
//然后全部弹栈消失才能得出结果 ,方法调用了2*2*2...次
}
}
//循环实现
int vibonaqiII(int n){
int result = 1;
int num = 0;
int i;
if(n<=0){
return num;
}
else if(n<=2){
return result;
}
else{
for(i = 0;i<n-1;i++){
result = result + num;//两项相加 ,进行了n-1次,在这个式子中等号后面的result为第二项 ,num为第一项
num = result - num;//这个式子中result减去第一项则为第二项,然后第二项成为新的第一项再与result相加......
}
return result;
}
}
求斐波那契数列的某一项,常用的两种方法(C语言实现)
于 2022-03-27 16:45:22 首次发布