gpt4 book ai didi

python - python 中的基本递归遇到问题

转载 作者:行者123 更新时间:2023-12-01 06:00:42 24 4
gpt4 key购买 nike

我正在学习如何像计算机科学家一样思考,目前正在尝试掌握递归。我在其中一个问题上遇到了麻烦,所以我希望你能帮助我解决。

我正在编写一个函数,用于查找列表的递归最小值,该列表的元素是整数、整数列表、整数列表列表等。

这是我当前的版本:

def recursive_min(nested_num_list):
"""
>>> recursive_min([9, [1, 13], 2, 8, 6])
1
>>> recursive_min([2, [[100, 1], 90], [10, 13], 8, 6])
1
>>> recursive_min([2, [[13, -7], 90], [1, 100], 8, 6])
-7
>>> recursive_min([[[-13, 7], 90], 2, [1, 100], 8, 6])
-13
"""
min = nested_num_list[0]
while type(min) == type([]):
min = min[0]
for item in nested_num_list:
if type(item) == type([]):
recursive_min(item)
elif item < min:
min = item
return min

但是,这只适用于在顶层找到最小值,所以我现在的代码无法深入列表的深度。

现在,看看答案,我知道我的版本应该是这样的:

def recursive_min(nested_num_list):
"""
>>> recursive_min([9, [1, 13], 2, 8, 6])
1
>>> recursive_min([2, [[100, 1], 90], [10, 13], 8, 6])
1
>>> recursive_min([2, [[13, -7], 90], [1, 100], 8, 6])
-7
>>> recursive_min([[[-13, 7], 90], 2, [1, 100], 8, 6])
-13
"""
min = nested_num_list[0]
while type(min) == type([]):
min = min[0]
for item in nested_num_list:
if type(item) == type([]):
min_of_elm = recursive_min(item)
if min_of_elm < min:
min = min_of_elm
elif item < min:
min = item
return min

请注意,它不是仅仅执行 recursive_min(item),而是将其分配给一个变量,并将其与当前的最小值进行比较。我不明白为什么我需要这样做,因为在我看来,如果我在嵌入列表上执行整个函数,并且这是一个整数列表,那么它应该到达 elif 语句(而不是 if 语句)并正确比较这些值。

我知道我一定错过了一些关于递归的东西。我真的很感激您能给我的任何见解,帮助我理解是什么让第二个版本有效但第一个版本失败。

谢谢!

最佳答案

为什么它会起作用?您调用该函数,它会递归直到找到最小值。那么它有什么作用呢?它依次退出所有递归,直到回到顶层。此时,min 的值是多少?与开始递归之前的情况完全相同,因为您从未捕获过递归函数的返回值。

不要忘记函数的每次调用都有自己的局部变量,因此也有自己的局部值 min

关于python - python 中的基本递归遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com