9.3 递归

  1. 解释:函数调用自己,这种调用过程称为递归(recursion)。
  2. 难点:结束递归的时机。否则会陷入无限递归
  3. 比较:循环效率高,递归方案简洁

9.3.1 演示递归

9.3.2 递归的基本原理

9.3.3 尾递归

  1. 相当于循环,阶乘很方便
  2. 循环和递归比较
  1. 每次递归都会创建一组变量,所以使用的内存更多
  2. 每次递归会将创建的一组新变量放在栈中
  3. 每次递归都是函数调用,执行速度慢
  4. 递归数量受限于内存空间

9.3.4 递归和倒序计算

  1. 例子:以二进制形式打印整数
  2. 思路:取余2得出0还是1,r == 0 ? '0' : '1'数值转换成字符。这里用到putchar函数

9.3.5 递归的优缺点

  1. 方案简洁
  2. 内存消耗大。多级递归变量数量呈指数增长,有可能导致程序崩溃(斐波那契数列-双递归)
  3. 不方便阅读和维护
  4. 效率低

例子

华为机试-放苹果