从零开始的C语言学习(第五天)

今天学习了函数的递归和迭代

函数的递归:

函数中可以调用函数,而当函数自己调用自己时便是函数的递归。函数的递归其实蕴含着两重意思:递推和回归。

函数的递归要满足两个必要条件:1、有限制条件  2、每次递归后,越来越接近这个限制条件

如果不能满足这两个条件的话,函数递归会变成死递归,最终导致栈溢出(stack overflow)。但是,值得注意的是,即便满足这两个限制条件,若是函数递归次数太多,仍有可能出现栈溢出。

函数递归主要用于解决一些重复性、机械性却又较为繁杂的问题,此时利用函数递归,便可“大事化小”

比如说,要按顺序打印输入整数的每一位就适合用函数递归解决:

或者说,写一个函数,不创建临时变量,计算字符串的长度,这个也适合使用函数递归:

函数的迭代:

迭代本质上是循环的一种,但循环不完全是迭代。

很多能用函数迭代解决的问题,其实用函数递归也能解决,但在某些时候利用函数迭代解决问题的效率要远远高于函数递归,计算斐波那契数就是一个很好的例子:

当使用函数递归计算斐波那契数时,会存在大量的时间的浪费和重复的计算。比如说计算第二十个斐波那契数,光是第三个斐波那契数就重复计算了2584次。用函数递归如果计算序号较大的斐波那契数,所花时间将相当之多,效率极为地低下。

但改用函数迭代就不存在这样重复计算的问题,计算斐波那契数效率极高,具体代码如下:

今天的C语言学习就分享到这里,最后寄语以勉励自我:靡不有初,鲜克有终。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值