C语言递归算法

目录

递归

什么是递归?

递归的两个必要条件 

递归的优缺点

递归求阶乘

递归求斐波那契数

优化求阶乘和斐波那契数

总结


递归

什么是递归?

所谓递归,我认为就是存在传递也存在归还功能的一种算法,简单点来说,就是一个函数直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。特点:函数自己调用自己

递归的两个必要条件 

  • 存在限制条件,当满足这个限制条件的时候,递归便不再继续。 
  • 每次递归调用之后越来越接近这个限制条件

递归的优缺点

优点:

  1. 简洁。只需要几行代码就能实现递归。
  2. 在树的前序,中序,后序遍历算法中,递归的实现明显要比循环简单得多。


缺点:

  1. 递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。->效率
  2. 递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如Fibonacci斐波那契数列的递归实现。->效率
  3. 调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。->性能

下面从几个递归的例题让大家更清楚的理解递归算法!

递归求阶乘

  • 函数功能:设
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值