答案页 · 12 道题

Python 递归练习答案

本页汇总 Python 递归 的 12 道练习。先做练习页,再回到这里核对准确答案和原因。

快速答案

本答案页包含 Python 递归 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。

答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。

01 · 选择题

每个递归函数都必须有什么?

  1. while 循环
  2. 全局变量
  3. 基线条件正确答案
  4. 列表

答案: 基线条件

为什么: 没有基线条件,函数会一直调用自己。

02 · 选择题

这段代码会输出什么?

def f(n):
    if n == 0:
        return 1
    return n * f(n - 1)
print(f(4))
  1. 1
  2. 4
  3. 12
  4. 24正确答案

答案: 24

为什么: 递归调用把 4 * 3 * 2 * 1 相乘,结果是 24。

03 · 选择题

递归函数为什么会抛出 RecursionError?

  1. 它返回字符串
  2. 它导入了 math
  3. 它永远到不了基线条件正确答案
  4. 它使用了太多列表

答案: 它永远到不了基线条件

为什么: 每次调用都会增加栈帧,直到超过 Python 的递归限制。

04 · 选择题

运行结果是什么?

def fib(n):
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)
print(fib(5))
  1. 8
  2. 5正确答案
  3. 3
  4. 13

答案: 5

为什么: fib(5) 对应序列 0、1、1、2、3、5。

05 · 填空题

补全基线条件。

def factorial(n):
    if n <= 1:
        ____ 1
    return n * factorial(n - 1)
print(factorial(3))

答案: return

为什么: 基线条件直接返回 1,不再发起新的调用。

06 · 填空题

补全更小的输入。

def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n ____ 1)
print(factorial(4))

答案: -

为什么: factorial(n - 1) 会让输入朝基线条件靠近一步。

07 · 填空题

补全空列表的基线值。

def total(items):
    if not items:
        return ____
    return items[0] + total(items[1:])
print(total([1, 2]))

答案: 0

为什么: 空列表对总和没有贡献。

08 · 填空题

补全第二次递归调用。

def fib(n):
    if n < 2:
        return n
    return fib(n - 1) + fib(n - ____)
print(fib(5))

答案: 2

为什么: fib(n) 会调用 fib(n - 1) 和 fib(n - 2)。

09 · 输出预测

这段程序打印出什么?

def fact(n):
    if n <= 1:
        return 1
    return n * fact(n - 1)
print(fact(3))

答案: 6

为什么: 3 * 2 * 1 等于 6。

10 · 输出预测

代码的输出结果是什么?

def total(items):
    if not items:
        return 0
    return items[0] + total(items[1:])
print(total([2, 4, 6]))

答案: 12

为什么: 递归调用把 2 + 4 + 6 相加,结果是 12。

11 · 输出预测

屏幕上会显示什么?

def fib(n):
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)
print(fib(6))

答案: 8

为什么: 序列在索引 6 处的值是 8。

12 · 输出预测

这段代码会输出什么?

def countdown(n):
    if n == 0:
        return 0
    return 1 + countdown(n - 1)
print(countdown(4))

答案: 4

为什么: 函数会向零递归四次,最终返回 4。

先试一遍题目

打开 Python 递归 练习页,用即时反馈回答同样的 12 道题。

练习本课