c语言:递归

二、递归(2个经典例题)

递归核心:终止条件 + 递推公式

1.定义:函数的自我调用,自己调用自己,每次调用都会逼近临结条件,知道达到条件为止。

例:int main()

{ printf("haha");

main();

return 0;

}

因为没有临界条件,它会不停打印haha

2.递归的限制:有限制条件

向条件靠近

3.公式类题型:翻译公式+判断是否存在特殊项需要单独存放

4.递归一般可以用循环代替,有时循环的效果更好

5.如果无限递归,会出现栈溢出的情况

6.递归时函数自己调用自己,所以一定要设函数。

比如:int func(int a)

{

if()

{

return x;

}

复制代码
    return func(m);

}

7.一般题型

顺序打印(如果不用递归就要用数组)

求阶层:公式

斐波那契数列:公式

青蛙跳阶问题:先分清最后到底要多少步才能跳上去,再往回反推。fact=fact(n-k1)+fact(n-k2);

汉若塔:void hanoi(int n, start, temp, desd)

{

if(n == 1)

{

printf("%c → %c\n",a,c);

return;

}

hanoi(n-1,a,c,b); //把n-1个从a移到b,c辅助

printf("%c → %c\n",a,c);

hanoi(n-1,b,a,c); //把n-1个从b移到c,a辅助

}

逻辑:

  1. n==1,直接移动,递归出口
  2. 先把上面n-1盘子移到中转柱
  3. 移动最底下最大圆盘到目标
  4. 再把n-1个从中转移到目标
相关推荐
学逆向的6 分钟前
C 堆区内存管理
c语言·开发语言·网络安全
智能运维指南39 分钟前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
yz_aiks1 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵2 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设2 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都2 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
鱼宵2 小时前
Stream 终端操作一次讲透:collect、count、reduce 怎么选
java·stream·终端操作
一去不复返的通信er2 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
白山编程大哥2 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Linux运维技术栈3 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维