在列表Python 3递归中查找最大值时,意外值为None

2024-04-27 00:34:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个简单的递归函数,以便在不使用任何内置函数的情况下查找列表中的最大值,但“print”和“len”除外。我使用递归进行了一个简单的线性搜索,将列表中的每个成员与当前最大值进行比较

x=[1,2,3]
Max=x[-1]

def Max_list(Max, x, c=2):

    if len(x)==1:
        return Max

    else:

        if c==(len(x)+1):
            print('hi')
            return Max

        elif x[len(x)-c]>Max:
            Max=x[len(x)-c]
            c+=1
            Max_list(Max, x, c)

        elif x[len(x)-c]<=Max:
            c+=1
            Max_list(Max, x, c)

print(Max_list(Max, x))

使我困惑的是,我的程序打印“hi”(这是一个验证,我的if条件得到满足),但没有返回任何结果。我可以让它尝试返回任何东西,但它仍然返回“无”。 我很想知道如何修复它,但是如果有人能给我一个解释,为什么我的代码在当前状态下总是不返回任何结果,那就太好了。你知道吗


Tags: 函数列表lenreturnifdef情况成员
2条回答

正如其中一个用户在评论中指出的,您需要在对Max_list(Max, x, c)的两个调用中添加一个return语句。为什么会这样?你知道吗

在Python中,如果调用的函数没有return语句,则默认返回值为None。如果我们看看你的递归,它实际上是这样做的:

    Initial Call:
    Max_list(3, x, 3)
              vvvvv
            Max_list(3, x, 4)
                      vvvvv
                     print('hi')
                     return 3 
            return None
    return None 

在添加这些返回语句后,我们得到了以下内容:

    Initial Call:
    Max_list(3, x, 3)
               vvvvvv
            Max_list(3, x, 4)
                      vvvvv
                     print('hi')
                     return 3 
            return the value of the above (3)
    return the value of the above (3)

正如user2357112所说,您必须明确地使用return。另外Patrick Gallagher也很好地说明了如何使用x[-1]检索列表中的最后一个元素。你知道吗

x=[1,2,3]
Max=x[-1]

def Max_list(Max, x, c=2):

    if len(x)==1:
        return Max

    else:

        if c==(len(x)+1):
            return Max

        elif x[len(x)-c]>Max:
           Max=x[len(x)-c]
            c+=1
            return Max_list(Max, x, c)

        elif x[len(x)-c]<=Max:
            c+=1
            return Max_list(Max, x, c)

print(Max_list(Max, x))

相关问题 更多 >