简单递归【1】

递归的概念不赘述了。

这里有几个递归的基础题,简单分析一波

简单递归【2】会有一个Hanoi塔问题的解析!

敬请期待!

阶乘我们之前用循环写过了,代码大概是这样的

#include<stdio.h>
int main(){
	int n,result,i;
	scanf("%d",&n);
	result=1;
	for(i=1;i<=n;i++){
		result=result*i;
	}
	printf("%d",result);
	return 0;
} 

这里呢,可以将循环用一个递归函数来替代

写递归函数时需要找到递归出口以及由前式递推的关系

出口一般是很明显的状态,可以有它推出其他各项

这里的出口很显然是n==1时返回1了

那么关系式呢?

上面已经说了

当n!=1时n的阶乘就等于n*(n-1)!

想到这里代码就可以写出来了,不过有些同学想要弄清楚执行过程可以简单手推一下。

不过这里建议,手推在理解递归时有一定帮助,不过后续还是不要试图过于深入地理解太复杂的关系。会把脑子搞坏!

到这里就可以上代码了

#include<stdio.h>
unsigned fac(int n){//这里unsinged是考虑了阶乘过大的情况
	unsigned result;
	if(n==0){//出口
		result=1;
	}
	else{
		result=n*fac(n-1);//减治递归?是这个说法吧
	}
	return result;
}
int main(){//主函数
	unsigned n;
	scanf("%d",&n);
	printf("%d",fac(n));
	return 0;	
} 

 斐波拉契数列与上面的不同是在自身里面调用了两次自身

老规矩,贴循环代码

#include<stdio.h>
int main(){
	int n,fb1,fb2,fb,i;
	scanf("%d",&n);
	fb1=1;
	fb2=1;
	for(i=3;i<=n;i++){
		fb=fb1+fb2;
		fb1=fb2;
		fb2=fb;
	}
	printf("%d",fb);
	return 0;
}

与上面对应

出口:

n==1-->1

n==2-->1

关系fb=f(n-1)+f(n-2)

依此写出代码

#include<stdio.h> 
unsigned  fibo(unsigned n){
	unsigned result;
	if(n==1){
    	return 1;
	}
	else if(n==2){
		return 1;
	}
	else{
		result=fibo(n-1)+fibo(n-2);   
		return result;   
	}
}
int main(){
	unsigned n;
	scanf("%u",&n);
	printf("%u",fibo(n));
} 

好啦!

这里呢有一道题

可以试着做一下

 加油

ps:立flag!!写Hanoi塔问题分析、BF算法、还有几个多维数组的题解!整理一下吧!

晚安!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值