函数的递归调用

 

递归的基本概念


  递归是一种常用的程序设计技术,C语言中,允许函数递归调用。递归是在连续执行某一处理过程时,该过程中的某一步要用到它自身的上一步(或上几步)的结果。在一个程序中,若存在程序自己调用自己的现象就是构成了递归。
如果函数funA在执行过程又调用函数funA自己,则称函数funA为直接递归。如果函数funA在执行过程中先调用函数funB,函数funB在执行过程中又调用函数funA,则称函数funA为间接递归。程序设计中常用的是直接递归。


  在数学中递归定义的数学函数是非常常见的。例如,当n为自然数时:
1 当 n=0 时
n * (n-1)! 当 n>0 时
1 当 n=0 时
x * xn-1 当 n>0 时
  从数学角度来说,如果要计算出f(n)的值。就必须先算出f(n-1),而要求f(n-1)就必须先求出f(n-2)。这样递归下去直到计算f(0)时为止。由于已知f(0),就可以向回推,计算出f(n)。

当一个问题蕴含了递归关系且结构比较复杂时,采用递归调用的程序设计技巧可以使程序变得简洁,增加了程序的可读性。但递归调用本身是以牺牲存储空间为基础的,因为每一次递归调用都要保存相关的参数和变量。同样,递归本身也不会加快执行速度;相反,由于反复调用函数,还会或多或少地增加时间开销。递归调用能使代码紧凑,并能够很容易地解决一些用非递归算法很难解决的问题。
  请注意,所有的递归问题都一定可以用非递归的算法实现,并且已经有了固定的算法。如何将递归程序转化为非递归程序的算法已经超出了本书的范围,感兴趣的读者可以参看有关数据结构的内容。
<!--EndFragment-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值