C语言中的递归

本文深入探讨了递归的基本概念,介绍了递归如何通过将大问题分解为小问题来简化问题解决过程。文章以斐波那契数列的计算为例,详细解释了递归函数的实现方法,并讨论了递归的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归

   总的来说就是自己调自己。一个过程或者函数在其定义或说明中有直接或间接调用自身的方法,它通常把一个大型复杂问题转化成一个与原问题相似的规模较小的问题来求解。
   其优点是大大地减少了程序的代码量。缺点是需要多次调用函数,需要不断在栈上开辟空间(形成栈帧结构),被调函数调用结束后返回一个数到上个被调函数,该被调函数空间被释放。在这个过程中,需要时间的耗费。递归次数越多,所需花费时间也越多。

递归的两个必要条件
1.存在限制条件,当满足这个限制条件的时候,递归不再继续。即递归出口。
2.每次递归调用后越来越接近限制条件。

递归示意图:(以用递归求字符串长度为例)

在这里插入图片描述

迭代法求斐波那契数:
斐波那契数有个递推关系:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2),其中n>=2
我们可知递归的出口是 n<=2
源代码如下:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#pragma warning(disable:4996)
int fib(int n)
{
 if (n <= 2)
 {
  return 1;
 }
 else
 {
  return fib(n - 1) + fib(n - 2);
 }
}
int main()
{
 int n = 0, p = 0;
 scanf("%d", &n);
 p = fib(n);
 printf("%d\n", p);
 system("pause");
 return 0;
}

当n小于等于2时,斐波那契数列前两项都是1,故返回1;
当n大于2,即n>=3时,这个斐波那契数n等于前两个数的和。
引用一个文件夹例子,如下图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值