函数的递归(学习笔记)


前言

依旧是我这个跑路人,学到了c语言中的重难点递归上了好好总结一波。
请添加图片描述

递归有点抽象所以我用例题来做主体进行讲解。

一、什么是递归

递归就是一个过程或一个函数在其定义或者说明中直接或间接调用自身的一种方法。
每次递归的时候系统都会为函数重新规划一片内存所以使用递归时不宜次数过多否则容易导致栈溢出。
我们在使用递归主要目的是为了大事化小将函数代码变得干净简洁。

二、例题

1.打印整数每一位

无
本题是实现整数的数字打印如输入1234 打印1 2 3 4

在使用递归时一定要学会在适当情况时结束递归,所以每一个使用递归完成的函数一定是要有自己的结束条件的本题的结束条件是:if(n>9)在一次次递归中函数从1234逐渐变为1无法进入语句中也就无法继续递归然后就先以n=1进行下条语句printf 然后返回 n = 12 时的函数时12%10得到了2 后面同上
请添加图片描述
是不是还挺简单的。
(这里有栈的思想,博主会在本篇文章评论中推荐一篇关于栈思想的文章)

2. 斐波那契数列

(个人感觉使用递归来解决函数问题十分简单)
首先条件: 前两个数为1后面为前两个数之和,高中都学过俺就不赘述了。

上代码!!

int feibo(int n)
{
	if (n <= 2)
	{
		return 1;
	}
	else
	{
		return feibo(n - 1) + feibo(n - 2);
	}
}
int main(void)
{
	int n = 0;
	scanf("%d", &n);
	int ret = feibo(n);
	printf("%d", ret);
	return 0;
}

我认为像斐波那契数列以及与他相似的数列都可以使用以下思想:
1.寻找首要条件,比如这道题的首要条件是当n<=2时 值为1其他的n值都可以从n<=2出衍生出来
2.找其他n值时与n<=2时的关系。
就写出了这个代码。青蛙跳台阶,汉诺塔也是相同原理。不过这个原理并不对所有的递归适用。(之后博主也会对此进行总结)

请添加图片描述

总结

还是重复一下由斐波那契数列总结出的结论
用递归时如果可以找到原始条件就用原始条件和后面规律来写递归可以大大降低难度哦~
建议多看两遍斐波那契例题讲解。
就这样,拜拜。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就一个挺垃圾的跑路人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值