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