今天学习了函数的递归和迭代
函数的递归:
函数中可以调用函数,而当函数自己调用自己时便是函数的递归。函数的递归其实蕴含着两重意思:递推和回归。
函数的递归要满足两个必要条件:1、有限制条件 2、每次递归后,越来越接近这个限制条件
如果不能满足这两个条件的话,函数递归会变成死递归,最终导致栈溢出(stack overflow)。但是,值得注意的是,即便满足这两个限制条件,若是函数递归次数太多,仍有可能出现栈溢出。
函数递归主要用于解决一些重复性、机械性却又较为繁杂的问题,此时利用函数递归,便可“大事化小”
比如说,要按顺序打印输入整数的每一位就适合用函数递归解决:
或者说,写一个函数,不创建临时变量,计算字符串的长度,这个也适合使用函数递归:
函数的迭代:
迭代本质上是循环的一种,但循环不完全是迭代。
很多能用函数迭代解决的问题,其实用函数递归也能解决,但在某些时候利用函数迭代解决问题的效率要远远高于函数递归,计算斐波那契数就是一个很好的例子:
当使用函数递归计算斐波那契数时,会存在大量的时间的浪费和重复的计算。比如说计算第二十个斐波那契数,光是第三个斐波那契数就重复计算了2584次。用函数递归如果计算序号较大的斐波那契数,所花时间将相当之多,效率极为地低下。
但改用函数迭代就不存在这样重复计算的问题,计算斐波那契数效率极高,具体代码如下:
今天的C语言学习就分享到这里,最后寄语以勉励自我:靡不有初,鲜克有终。