在Python中通过传递列表递归调用函数

在Python中通过传递列表递归调用函数,python,function,recursion,Python,Function,Recursion,我知道有更简单的方法来创建一个函数,它在一个数字列表中给出最大的数字,但我想使用递归。当我调用最大的函数时,我没有得到任何结果。例如,最伟大的([1,3,2])没有给我任何东西。如果列表中只有两个元素,我得到了正确的答案,因此我知道问题一定是函数调用本身。不知道为什么 def compare(a,b): if a==b: return a if a > b: return a if a < b: return b

我知道有更简单的方法来创建一个函数,它在一个数字列表中给出最大的数字,但我想使用递归。当我调用最大的函数时,我没有得到任何结果。例如,最伟大的([1,3,2])没有给我任何东西。如果列表中只有两个元素,我得到了正确的答案,因此我知道问题一定是函数调用本身。不知道为什么

def compare(a,b):
    if a==b:
        return a
    if a > b:
        return a
    if a < b:
        return b


def greatest(x):
    if len(x)==0:
        return 0
    i=0
    new_list=[]
    while i< len(x):
        if len(x)-i>1:
            c=compare(x[i],x[i+1])
        else:
            c=x[i]
        new_list.append(c)
        i=i+2
    if len(new_list)>1:
        greatest(new_list)
    else:
        return new_list[0]

print greatest([1,3,2])
def比较(a,b):
如果a==b:
归还
如果a>b:
归还
如果a1:
c=比较(x[i],x[i+1])
其他:
c=x[i]
新列表。附加(c)
i=i+2
如果len(新列表)>1:
最伟大的(新名单)
其他:
返回新的_列表[0]
打印最大值([1,3,2])
此行:

if len(new_list)>1:
    greatest(new_list) # <- this one here
修复后,您的函数似乎正常运行(尽管我没有仔细观察):

这一行:

if len(new_list)>1:
    greatest(new_list) # <- this one here
修复后,您的函数似乎正常运行(尽管我没有仔细观察):


简单的递归可以如下所示:

from random import *
def greatest(x,maxx=float("-inf")):
    if len(x)>0:
        if x[0] > maxx:
            maxx=x[0]
        return greatest(x[1:],maxx)
    else:
        return maxx

lis=range(10,50)
shuffle(lis)
print greatest(lis) #prints 49

简单的递归可以如下所示:

from random import *
def greatest(x,maxx=float("-inf")):
    if len(x)>0:
        if x[0] > maxx:
            maxx=x[0]
        return greatest(x[1:],maxx)
    else:
        return maxx

lis=range(10,50)
shuffle(lis)
print greatest(lis) #prints 49

看看以后的帖子。谢谢。对这个问题有什么想法吗?这看起来。。。太复杂了
compare
可以替换为内置的
max
,递归解决方案真的不应该在列表上循环-只需将
x[0]
Grest(x[1:])
进行比较……查看以后的帖子。谢谢。对这个问题有什么想法吗?这看起来。。。太复杂了
compare
可以用内置的
max
替换,递归解决方案真的不应该在列表上循环-只需将
x[0]
Grest(x[1:])
进行比较即可。谢谢。我明白你的意思,谢谢。我明白你的意思。你可以简单地说几句话:不客气。看起来现在有一个缩进错误(
return maxx
应该缩进一个tabstop)。@AdamMonsen No这不会引发
IndentationError
,但仍然修复了该错误。您可以通过如下几行来简化:不客气。看起来现在有缩进错误(
return maxx
应该缩进一个tabstop)。@AdamMonsen No不会引发
IndentationError
,但仍然修复了该问题。