递归引例---斐波那切数列

6 篇文章 0 订阅
5 篇文章 0 订阅

                                       递归--->  斐波那切数列

在讲解递归之前,我们先来解决下著名的“兔子数列”(刚好是本博主的属相,偷着乐~,蛤蛤~v~)也即“斐波那切数列”。

图片选自小小画家(超可爱有木有~)

 

如果我们设F表示兔子有几对,用n表示第几个月,那么第n个月的兔子数F(n)的数学表达式为:    

Method 1: 很容易想到用数组解决

#include<stdio.h>  
#define N 100 //根据具体要求设置值 
int main(){
	int i,num;int a[N];
	printf("请输入你要打印的斐波那切数列个数:\n");
	scanf("%d",&num);	
	a[0]=0;a[1]=1;
	for(i=2;i<num;i++){
		a[i]=a[i-1]+a[i-2];
	}
	for(i=0;i<num;i++){
		printf("--->%d ",a[i]);
	}
	return 0; 
} 

Method 2: 根据刚刚的数学表达式,我们用递归来解决

#include<stdio.h>
int S(int n){
	if(n==1){
		return 1;//第一天兔子数是1; 
	}
	if(n==2){
		return 1;//第er天兔子数也是1; 
	}
	else{	
		return S(n-1)+S(n-2);//从第三天开始就有此规律 
	}
} 
int main(){
	int num;
	printf("请输入你要打印的斐波那切数列个数:\n");
	scanf("%d",&num);
	if(num<1){
		printf("0\n");
		return -1;
	}
	S(num);
	printf("~~~~~%d",S(num));
	return 0;
}

有关递归:

 ●   对比了两种实现斐波那契的代码,迭代(Method 1)和递归(Method 2)

      区别 :  迭代使用的是循环结构,  递归使用的是选择结构。

●   优点:使用递归能使程序的结构更清晰、更简洁、  更容易让人理解,从而减少读懂代码的时间。

●   缺点;大量的递归调用会建立函数的副本,会消耗大量的时间和内存,而迭代则不需要此种付出

定义 : 递归函数分为调用和回退阶段,递归的回退顺序是它调用顺序的逆序。
●  在高级语言中,函数调用自己和调用其他函数并没有本质的不同。我们把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数。

●  注意:写递归程序最怕的就是陷入永不结束的无穷递归中。切记,每个递归定义必须至少有一个条件,  当满足这个条件时递归不再进行,即函数不再调用自身而是返回,也叫递归的出口。 以上我们的F(n)函数结束条件是 i< 2。

递归的思想在数据结构预算法中很重要,请大家细细品味。

  • 正经致谢:(差点忘了给小可爱们致谢,罪过罪过~)

今天骚气一波~ 蛤蛤

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值