☰
c语言:递归
2026/10/8 22:55:50 网站建设 项目流程

二、递归(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个从中转移到目标

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询