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

2024-06-16 11:59:08 发布

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

我知道有更简单的方法来创建一个函数,它给你一个数字列表中最大的数字,但是我想使用递归。当我把这个函数称为最伟大的函数时,我没有得到任何结果。例如,grest([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])

Tags: 方法函数元素列表newlenreturnif
2条回答

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

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

这条线:

if len(new_list)>1:
    greatest(new_list) # <- this one here

调用greatest,但不处理它返回的值。你想要吗

^{pr2}$

修复后,您的函数似乎正常工作(尽管我没有仔细观察):

>>> import itertools
>>> for i in range(1, 6):
...     print i, all(max(g) == greatest(g) for g in itertools.product(range(-5, 5), repeat=i))
... 
1 True
2 True
3 True
4 True
5 True

相关问题 更多 >