第5章 递归


目录


一、递归的基本概念与递归程序设计
  1. 递归:直接或间接的调用函数本身
  2. 递归程序的两个特点:
    1. 具备递归出口
    2. 在不满足递归出口的情况下,把原问题分解成若干子问题,子问题的求解通过一定的方式修改参数进行函数自身调用加以实现
二、递归程序执行过程的分析
三、递归程序到非递归程序的转换
  1. 递归程序和非递归程序的区别:相比较非递归程序,递归程序的空间需求和时间需求较高

3.1 简单递归程序到非递归程序的转换

  1. 简单递归程序:自顶向下产生计算序列
  2. 非递归程序:利用递推关系,自底向上产生计算序列

3.2 复杂递归程序到非递归程序的转换

  1. 复杂递归程序到非递归程序的转换:使用栈来记录和管理所设置的回溯点,当求解无法进行下去或当前处理的工作已经完成时必须退回到所设置的回溯点,继续问题的求解
四、递归程序设计的应用实例(大纲未规定)
五、算法设计题

5.1 打印结果—1\n22\n333\n...(真题)(算法)

试编写一个递归函数,以正整数 \(n\) 为参数,该函数所实现的功能为:在第 \(1\) 行打印输出 \(1\) 个 \(1\),在第 \(2\) 行打印输出 \(2\) 个 \(2\) \(,\cdots,\) 在第 \(n\) 行打印输出 \(n\) 个 \(n\)。

print(int n) {
    int i;

    if (n != 0) {
        print(n - 1);
        for (i = 1; i <= n; i++) printf("%d", n);
        printf("\n");
    }
}
六、错题集