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

标签 python recursion

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

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

这是我当前的版本:

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/

相关文章:

python - pandas.read_csv 中的 dtype=None 有何作用?

ruby 递归正则表达式

c - 如何检查函数是否正在回调自身

c - 深度递归错误

python - 为什么这没有分配正确的值?

algorithm - 如何找到二维数组中最长的序列?

python - 将 Pandas 日期列转换为经过的秒数

python - 没有这样的选项 : --use-feature while installing tensorflow object detection api

python - 动态添加/覆盖property属性的setter和getter

加载证书时,Python M2Crypto 在 ssl_ctx_load_verify_locations 中引发异常