- 题目:
- 递归:从后面往前面算。不停的调用自己本身。递推:从前面往后面算。
- 思路:
- 递归:1.我们运用递归来解决问题。首先,我们要找到递归的出口在哪里。观察数列发现F(0)=0,F(1)=1;是出口。
- 2.分析数列的规律。 可以看出从第3个元素开始,F(3)=F(2)+F(1);F(2)=F(1)+F(0);以此类推。可以发现输入一个元素的位置并计算出该元素在数列中的数据,是一个依次累加的过程。这种累加循环,我们创建一个函数进行计算。
- 3.找完了出口和规律。我们就可以开始构思程序。
程序:
#include <stdio.h>
int main(){int n,ans;
scanf("%d",&n);
ans=fn(n);
printf("%d",ans);
}
//写一个方法进行递归调用自己
int fn(int n){
if(n==0){ //出口
return 0;
}else if(n==1){
return 1;
}else{
return fn(n-2)+fn(n-1);
}
return 0;
}
- 递推:循环累加,从第一个元素开始。
- 思想:
- 1.同样我们要找出终止循环的条件,f(0)和f(1)。
- 2.第一个元素和第二个元素为终止条件。那么我们的计算应该从第三个元素开始。一直计算到我们输入的数据位置结束。我们就可以算出答案。
- 注意:在进行循环计算的时候。我要不停的去更新f(n-1)和f(n-2)的数据。
- 程序:
#include <stdio.h> int main(){ //递推 int n=0;//输入数字的位置 int x=0;//F(N) int y=1;//n+1 int ans;//n+2 scanf("%d",&n); if(n==0){//出口 ans=0; }else if(n==1){//出口 ans=1; }else{ for(int i=2;i<=n;i++){ ans=x+y;//n=(n-2)+(n-1) x=y;//更新数据将每一个数据提前 y=ans;//更新数据 } } printf("%d",ans); return 0; }