我知道有更简单的方法来创建一个函数,它给出了数字列表中最大的数字,但我想使用递归.当我把函数调用得最大时,我得不到.例如,最大([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])
Run Code Online (Sandbox Code Playgroud)
这一行:
if len(new_list)>1:
greatest(new_list) # <- this one here
Run Code Online (Sandbox Code Playgroud)
调用greatest但不会对它返回的值执行任何操作.你要
return greatest(new_list)
Run Code Online (Sandbox Code Playgroud)
修好之后,你的功能似乎表现得很好(虽然我看起来不太近):
>>> 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |