C语言——递归入门

递归

递归是什么?

递归是什么,递归就是一种解决问题的方法——程序自身调用自身叫做递归。它的核心在于:大事化小!!!

先举几个例子:

1.接受一个整型值,按顺序打印它的每一位。(只考虑正数)

如:1234  ----应输出1  2   3   4

(1)先讨论如果不递归该怎样处理,一般步骤是这样的,先判断这个数是几位数,然后在记录下这个数的每一位,最后输出。我们想想,首先判断这个数的位数的时候就得创建临时变量进行循环,而后再动态创建一个数组来记录这个数的每一位。

(2)但是递归的话就不用这样复杂了,我们要做的是要读取它的每一位,那这个函数的工作就只是读取它的每一位即可。只要注意递归的边界就行。

上代码:

void num(int n) {
	if (n > 9) {
		num(n / 10);
	}
	printf("%d ", n % 10);
}

就这短短几行就可以解决问题了。

2.不创建临时变量求字符串的长度

(1)还是先来看看创建临时变量是如何做到的:创建临时变量来记录字符串的长度,进入循环遍历该字符串。

(2)不创建临时变量时,我们可以考虑到递归。先看代码:

int lenth(const char* str){
	if (*str == '\0') {
		return 0;
	}
	return 1+lenth(str + 1);
}

分析:

①字符串的结束条件就是遇到'\0',这就是递归的边界。

②接下来只要考虑这个函数的目的是为了干嘛就行,该函数是为了求字符串长度,那么如果字符串没结束就返回当前所计算的字符串的长度加1就行。

3.求一个数的阶乘:num!

(1)非递归处理:一个循环,如果(num-1)不等于0,就num=num*(num-1),只是表达思想即可,但在这里不推荐这种直接再原变量上直接进行操作的方法。

(2)递归:先上代码:

int fac(int num) {
	if (num == 1) {
		return 1;
	}
	return num * fac(num - 1);	
}

分析:

①同样递归的边界先搞清楚:当是1的时候就跳出。

②接下来只考虑该函数的功能即可,只要不是1,就返回num*(num-1)!,这样就明晰了很多。

总结:

1.递归的核心思想就是大事化小。

2.先考虑递归的边界,要确保递归能跳出,不然就会进入死循环。(一定会用if语句来进行分支,或者说判定是否要结束递归)

3.不要细想递归的内容,只想该函数的功能即可。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值