三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
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;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
北京医保新指南:企业如何帮员工快速上手?
长沙发布暴雨红色预警!多处交通管制,非必要不出行!
长沙磁浮快线:机场到高铁站的最快捷选择
公安部:推进拐卖儿童积案攻坚,绝不放过任何一名犯罪嫌疑人
如何快速寻找走失儿童:一份实用指南
《雍正王朝》:剧中不易被察觉的一个细节——搞活出丧的安亲王
雍正帝的知名度之谜:在位时期的辉煌与争议
【红会科普】:青春期女孩也会患妇科病?这些预防要点家长必知
青春期的孩子,身体在悄悄发生变化
瑞士保姆教你:孩子远离15件危险品!
《熊出没·真假相亲》:助力0-3岁儿童语言发展的动画片
光头强砍树挑战:从动画经典到网络热潮
糖尿病患者必看:最新保险攻略
科技创新驱动制造业转型升级:2025年展望与思考
国家卫健委推荐:低糖饮食计划
成都华西华科研究所:社区糖尿病筛查新利器!
光猫重启的正确步骤是什么?重启后需要检查哪些设置?
光纤网线断了解决方法大揭秘:如何迅速修复断裂的光纤网线?
秋冬皮肤瘙痒?明代名方消风散来帮忙
秋冬皮肤瘙痒?明代名方“消风散”来帮忙
钛钢的真相:分析这一现代材料的安全性和用途
雪城爱:从被抚养长大的小女孩到团队领导者的成长之路
雪城爱角色设计大揭秘:从转学生到圣洁之光的蜕变之路
雪城爱与雪城穗乃香:二次元文化中的命名之缘
新年到!如何安全存放打火机?
孩子玩打火机引燃防晒喷雾!这些防火小技巧要牢记
冬天泡温泉,福州这些地方超赞!
平潭岛:福州旅游新宠!
从零薪水到全球火爆:拳头游戏创始人"蛮王"的创业传奇
从游戏到帝国:拳头公司如何靠《英雄联盟》称霸电竞圈