#include<stdio.h>
#include<stdlib.h>
int fibon(int i){
if(i == 0)
return 0;
if(i == 1||i == 2)
return 1;
return (fibon(i-1) + fibon(i-2));
}
int main(){
int x = fibon(5);
printf("%d", x);
return 0;
}
递归的实现只要根据数列的递推式来构造就可以了
改进
#include<stdio.h>
#include<stdlib.h>
int obj[100];
int fibon(int i){
if(*(obj + i) != 0){
return obj[i];
}else if(i == 1||i == 2){
obj[i] = 1;
return 1;
}else return (fibon(i-1) + fibon(i-2));
}
int main(){
int x = fibon(20);
printf("%d", x);
return 0;
}
在递归过程中会重复计算已有的fibon()值,只需要把计算过的fibon()值存在一个与之下标对应的数组里,每次用到的时候判断一下是否已经计算过,若计算过拿来直接用即可。
本文介绍了如何使用递归实现斐波那契数列,并探讨了通过存储已计算过的值来改进递归算法,避免重复计算,提高效率。
2511

被折叠的 条评论
为什么被折叠?



