快速答案
本答案页包含 Python 递归 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。
答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。
每个递归函数都必须有什么?
答案: 基线条件
为什么: 没有基线条件,函数会一直调用自己。
这段代码会输出什么?
def f(n):
if n == 0:
return 1
return n * f(n - 1)
print(f(4))答案: 24
为什么: 递归调用把 4 * 3 * 2 * 1 相乘,结果是 24。
递归函数为什么会抛出 RecursionError?
答案: 它永远到不了基线条件
为什么: 每次调用都会增加栈帧,直到超过 Python 的递归限制。
运行结果是什么?
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
print(fib(5))答案: 5
为什么: fib(5) 对应序列 0、1、1、2、3、5。
补全基线条件。
def factorial(n):
if n <= 1:
____ 1
return n * factorial(n - 1)
print(factorial(3))答案: return
为什么: 基线条件直接返回 1,不再发起新的调用。
补全更小的输入。
def factorial(n):
if n <= 1:
return 1
return n * factorial(n ____ 1)
print(factorial(4))答案: -
为什么: factorial(n - 1) 会让输入朝基线条件靠近一步。
补全空列表的基线值。
def total(items):
if not items:
return ____
return items[0] + total(items[1:])
print(total([1, 2]))答案: 0
为什么: 空列表对总和没有贡献。
补全第二次递归调用。
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)。
这段程序打印出什么?
def fact(n):
if n <= 1:
return 1
return n * fact(n - 1)
print(fact(3))答案: 6
为什么: 3 * 2 * 1 等于 6。
代码的输出结果是什么?
def total(items):
if not items:
return 0
return items[0] + total(items[1:])
print(total([2, 4, 6]))答案: 12
为什么: 递归调用把 2 + 4 + 6 相加,结果是 12。
屏幕上会显示什么?
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
print(fib(6))答案: 8
为什么: 序列在索引 6 处的值是 8。
这段代码会输出什么?
def countdown(n):
if n == 0:
return 0
return 1 + countdown(n - 1)
print(countdown(4))答案: 4
为什么: 函数会向零递归四次,最终返回 4。
先试一遍题目
打开 Python 递归 练习页,用即时反馈回答同样的 12 道题。