三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
CSDN
1.
https://blog.csdn.net/2401_89044302/article/details/145739330
递归是编程中一种重要的算法思想,它通过将问题分解为更小的子问题来解决问题。本文通过三个具体的代码实例,帮助读者掌握函数递归的概念、实现方式以及适用场景。
递归 —> 大事化小
1.递归思想
递归是将问题转化为相似的较小问题,递推即递推回归。在C语言函数中可体现为函数调用函数自己。
2.函数的递归调用形式
if(递归终止条件成立) //在逐渐调用中接近终止条件
return 递归公式初值;
else
return 递归函数调用对应结果值;
3.简单函数递归实例
a.顺序打印数字的每一位
输入 6543
输出 6 5 4 3
void Print(int n)
{
if (n / 10 != 0)//递归结束条件
Print(n/10);
printf("%d ", n % 10);
}
这个函数通过递归调用自身,每次去掉数字的最后一位,直到数字只剩一位为止。然后在回溯的过程中,依次打印每一位数字。
b.计算阶乘
输入 5
输出 120
int Fit(int n)
{
if (n == 1)//递归结束条件
return 1;
else
return n * Fit(n - 1);
}
这个函数通过递归调用自身,每次将问题规模减小1,直到n等于1时返回1。然后在回溯的过程中,依次计算阶乘的值。
4.递归的适用情况
每次递归调用时占用内存空间,当递归层数过多时浪费栈帧过多且效率过低,也可能造成栈溢出。
例如计算第n个斐波那契数时:
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
递归层数过多会造成栈溢出。解决使用递归调用层数少的问题时是使用递归的合适情形。反之可以选择运行成本较低效率较高的 迭代(通常是循环)。
在上例的体现为:
int Fib(int n)
{
int a=1, b=1, c=1, i;
for (i =3; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
CRC算法原理与实现01——概述
怎样区别牙痛是不是上火引起的
为什么火车晚点后,不提速或者是缩减停留时间?
服刑期满当天释放吗
对事故认定书不服但又过了复核日期怎么办
媒体报道能否作为证据?法律视角下的全面解析
桃花树适合哪里种植
清风拂山岗他强任他强是什么意思
10年未竣工!福州市中心这座安置楼即将复工!
如何进行杠杆投资?这些投资策略有哪些风险和回报?
LVDT(线性可变差动变压器式位移传感器)工作原理与应用
上坟扫墓有讲究!“上坟带三宝,子孙多福财气到”指的是什么?有什么讲究?
个人所得税退税申请报告撰写指南
家用消毒柜怎么选才是正确的?家用消毒柜的选购注意事项
研究生如何找科研团队
研究证实:只要生气8分钟,就很有可能引发心脏病
头发多久洗一次才最好?5个洗头习惯让你头发越洗越少!
第十次集采结果出炉,仿制药凭超低价中选,原研药无奈全部出局
如何在Windows 11上禁用锁定屏幕
关于“眼压”的全面解析
基础护肤要“稳扎稳打”
耶稣的诞生和基督教出现:罗马究竟起到了怎样的作用?
拔丝地瓜:一道能甜到你心坎里的经典美食
孕期口腔问题会影响宝宝健康?可能和你想的不一样
用人工智能加速医疗模式变革
我国工科高校排名调整:浙大第2,哈工大超上海交大,西安交大第8
犬白内障:症状、原因、诊断与治疗全解析
减肥食谱酸奶(减肥喝什么酸奶最好)
红山森林动物园转型调查
Ubuntu20.04 Github等部分网页访问不了? 试下刷新DNS缓存吧!