蓝桥杯·斐波纳契数列 fibonacci问题·递归思想·递推思想

  • 题目:
  • 递归:从后面往前面算。不停的调用自己本身。递推:从前面往后面算。
  • 思路:
  • 递归: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; 
    }

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值