C 语言斐波那契数列 MCQ 练习题 4

2025年1月29日 | 阅读3分钟

1. 在递归斐波那契方法中,为了避免重复计算,一种常见的优化技术是什么?

  1. 多进程处理
  2. 文件 I/O
  3. 记忆化
  4. 迭代

说明

  • 正确答案是选项“c”。记忆化(Memorization)是递归斐波那契技术中用于避免重复计算的一种常用优化方法。
  • 记忆化是指当再次收到相同的输入时,重用昂贵函数调用的结果。
  • 函数在发起递归调用之前,可以确定给定输入的结果是否已经被计算并存储。

2. 在递归斐波那契函数中,以下哪项是堆栈溢出的症状?

  1. 编译错误
  2. 结果不正确
  3. 执行缓慢
  4. 程序崩溃

说明

  • 正确答案是选项“d”。递归函数将关于活动函数调用的信息存储在程序的调用堆栈中。
  • 在没有基本情况或终止条件,或者实现效率低下(例如未使用记忆化)的递归斐波那契函数中,递归深度可能变得过深。
  • 当递归深度超过有限的调用堆栈限制时,堆栈溢出会导致程序崩溃。
  • 通常,这种崩溃表现为运行时错误,导致程序意外终止。

3. 以下代码的输出是什么?

  1. 4
  2. 3
  3. 2
  4. 5

说明

  • 正确答案是选项“b”。可以使用递归函数 fib 计算第 n 个斐波那契数,该函数是给定 C 程序的一部分。在 n 为 0 或 1 的基本情况时,fib 函数返回 n。对于较大的值,它返回 fib(n-1) 和 fib(n-2) 的和。由于主函数调用 fib(4),因此打印出第 4 个斐波那契数。当程序打印时,输出是 3,这是斐波那契数列中的第 4 个数字。

4. 递归斐波那契函数中的 if (n = 1) return n; 这一行有什么作用?

  1. 遍历斐波那契数列
  2. 打印斐波那契数列
  3. 处理基本情况
  4. 相加两个斐波那契数

说明

  • 正确答案是选项“c”。检查 n 是否为 0 或 1 的那一行是 if (n = 1) return n。在此示例中,它不会进行进一步的递归调用,因为它会立即返回 n,从而给出正确的斐波那契数。
  • 为了使函数具有基本斐波那契数字的指定输出,有必要终止递归。

5. 对于斐波那契数列的朴素递归方法,哪种优化技术不适用?

  1. 穷举法
  2. 动态规划
  3. 记忆化
  4. 迭代

说明

  • 正确答案是选项“a”。当使用穷举法解决问题时,会尝试所有可能的计算或解决方案,而不进行任何优化。由于朴素递归方法会重复计算相同的数字而没有任何缓存或优化,因此在斐波那契数列的上下文中,它可以被视为一种穷举方法。
  • 因此,使用穷举法仅仅描述了未经优化的朴素递归方法,并没有提供任何优化。

6. 以下代码的输出是什么?

  1. 13
  2. 21
  3. 8
  4. 5

说明

  • 正确答案是选项“c”。提供的 C 程序使用迭代方法来确定位置 num + 1 处的斐波那契数。通过重复更新前两个斐波那契数 a = 0 和 b = 1 的初始值,计算斐波那契数列直到指定的位置。主函数打印结果,而 fib 函数返回指定位置的斐波那契数。由于 8 是第 6 个斐波那契数,对于 num = 5,程序计算 fib(6) 的结果是 8。因此,程序的输出是 8。