算法-递归记录

1. 递归介绍

  • 分支转向是算法的灵魂;
  • 函数和过程及其之间的相互调用,是在经过抽象和封装之后,实现分支转向的一种重要机制,而递归则是函数和过程调用的一种特殊形式,即允许函数和过程进行自我调用;
  • 递归函数是一种可以调用自身的函数,每次成功的调用都使得输入变得更加精细,使我们越来越接近问题的答案;
  • 递归也是一种基本而典型的算法设计模式,这一模式可以对实际问题中反复出现的结构和形式做高度概括,并从本质上加以描述与刻画,进而导出高效的算法。

##2.  递归的实现
为了理解递归究竟是如何工作的,下面看一下关于C程序在内存中的组织方式。一般一个可执行的程序由4个区域组成:代码段、静态数据区、堆和栈。当C程序中调用了一个函数时,栈会分配一块空间来保存与这个调用相关的信息。每一个调用都被当做活跃的。栈上的那块存储空间称为活跃记录,或者称为栈帧。 栈帧由5个区域组成:输入参数、返回值空间、计算表达式时用到的临时存储空间、函数调用时保存的状态信息以及输出参数。

image

栈是用来存储函数调用信息的绝好方案,这正是由于其后进先出的特点精确满足了函数调用和返回的顺序。然而栈也有缺点,栈维护了每个函数调用的信息知道函数返回后,才释放,这需要相当大的空间,尤其在程序中使用了许多递归的调用的情况。

但是我们可以采用一种尾递归的方式来避免前面提到的缺点。

同样以n的阶乘为例,其递推公式为 : 初始a&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值