三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
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;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
摩擦力与接触面积的关系:深入解析摩擦力的基本概念
原装还是高仿?专业技巧教你辨别手机屏幕
人参、丹参、党参、西洋参…到底啥区别?功效用法都在这了
经济学家称马斯克将引发美国经济深度衰退,但这不一定会发生
“曼德拉效应”越来越明显,难道人类记忆被集体篡改?
早餐想要吃得好,这8类食物必不可少!
新能源汽车里的插电式混动和增程式混动哪个好,应该买哪种?
一文就够!史上最全新房装修家庭网络规划设计与组网拓扑布线指南
丝路明珠绽华彩 共筑和谐新临夏
菠萝为什么要用盐水泡?
公司增资的法定程序有哪些
侠客岛:“体育饭圈化”危害很大,运动员应引导粉丝理性
不做全民爆款综艺的芒果TV,还在怎么折腾?
维生素K如何补充
无为而治:道法自然的治国智慧
观象玩辞:六十四卦简介
《醉翁亭记》中心思想赏析
八字命理中如何准确断定流月运势的方法
网络协议分析:从PPP到DNS的全面解析
气虚吃什么补最快?专家推荐5种食材
计算机网络之令牌环
俄媒曝出猛料:苏57换装二元隐身矢量喷嘴
怎么提高锅炉热效率?
孩子口齿不清、说话结结巴巴,可以到这个门诊看看......
什么原因能引起食管隆起
命运的多重维度:先天与后天的交织
如何与银行协商债务重组:三大场景下的具体步骤
最好听的十首儿歌,六一儿童节推荐歌曲
神十九乘组一周工作纪实:太空实验与设备维护有序开展
一文理解I/O多路复用模型