【发布时间】:2020-08-26 02:39:48
【问题描述】:
我有一个关于在列表中查找最大值的 Python 代码的问题。功能代码如下:
def large(x):
if len(x) == 1:
return x.pop(0)
else:
temp = x.pop(0)
previous = large(x)
if previous >= temp:
return previous
else:
return temp
但在此之前,我尝试过:
def large(x):
if len(x) == 1:
return x.pop(0)
else:
temp = x.pop(0)
if large(x) >= temp:
return large(x)
else:
return temp
它会返回错误信息:
<ipython-input-74-dd8676a7c4e6> in large(x)
3 return x.pop(0)
4 else:
----> 5 temp = x.pop(0)
6 if large(x) >= temp:
7 return large(x)
IndexError: pop from empty list
玩具数据是:
inputlist = [6,1,3,2,3,4,5,6]
large(inputlist)
提前感谢您的帮助。我找不到这个错误的主要原因。至于我,这两个代码是完全一样的。
【问题讨论】:
-
我假设你不能使用
max()函数?你确定你想要一个可变参数吗? -
在第二个版本中,您在同一个堆栈帧中调用 large(x) 两次,一次在 if 中,另一次在 return
-
考虑使用索引而不是弹出。这将避免偷偷摸摸的突变并且它还将具有更好的性能界限..对于每个递归调用,传递当前索引 + 1。这是一个很好的“模式”,可以递归迭代类似数组数据。
-
如果我要使用 pop,我会 1) 从 back 弹出以避免糟糕的复杂性转移数据,2) 使用循环而不是递归来保持边-效果关闭。
-
@OneCricketeer 我的目标是应用递归来构建
max函数。
标签: python python-3.x list recursion