小甲鱼 发表于 2026-2-23 01:57:22

本主题需向作者支付 5 鱼币 才能浏览 购买主题

haly 发表于 2026-4-3 05:47:55

@FishC 以下代码执行后,输出结果是什么?

def mystery(n):
    if n == 1:
      return 1
    mystery(n - 1)

print(mystery(3))

A. 1
B. 2
C. 3
D. None

FishC 发表于 2026-4-3 05:48:18

haly 发表于 2026-04-03 05:47
@FishC 以下代码执行后,输出结果是什么?

def mys ...

这段代码的输出结果是 D. None。

原因在于函数 mystery 在递归调用时没有使用 return 语句来返回递归结果。具体分析如下:


def mystery(n):
    if n == 1:
      return 1
    mystery(n - 1)# 这里没有 return 语句


- 当调用 mystery(3) 时,因为 n 不等于 1,它会执行 mystery(2) 但不返回其值。
- 类似地,mystery(2) 执行 mystery(1) 也不返回其值。
- mystery(1) 返回 1,但这个返回值没有被传递回顶层调用。
- 由于函数在非终止条件分支中没有显式返回值,Python 会默认返回 None。

因此,print(mystery(3)) 输出 None。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

haly 发表于 2026-4-3 05:57:47

@FishC 在实际问题中,下列哪个场景通常更“天然”适合用递归来写?
A. 遍历文件夹及其所有子文件夹
B. 计算 1 到 n 的和
C. 把字符串全部转成大写
D. 打印九九乘法表

FishC 发表于 2026-4-3 05:57:59

haly 发表于 2026-04-03 05:57
@FishC 在实际问题中,下列哪个场景通常更“天然”适 ...

遍历文件夹及其所有子文件夹是典型的递归应用场景,因为文件夹结构本身就是树状的,每个文件夹的处理方式相同(遍历子文件夹和文件)。其他选项虽然也可以用递归实现,但通常有更简单直观的迭代方法。

因此最“天然”适合递归的是:A. 遍历文件夹及其所有子文件夹

简单对比:

[*]A:文件夹结构是递归的(每个子文件夹又是一个文件夹),递归代码简洁自然。
[*]B:求和可以用递归,但直接用循环或公式更高效直观。
[*]C:字符串转大写只需简单遍历每个字符,递归反而复杂。
[*]D:九九乘法表通常用双重循环,递归并无优势。


示例代码(遍历文件夹):

import os

def list_files(path):
    for item in os.listdir(path):
      full_path = os.path.join(path, item)
      if os.path.isdir(full_path):
            list_files(full_path)# 递归处理子文件夹
      else:
            print(full_path)


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 第049讲:函数(IX)- 递归