我是python程序的新手。以下代码与列表有一些错误。
len = []
def collatz_length(n,count):
++count
if len[n]:
return len[n]
if n == 1:
len[n] = count
elif n & 1:
len[n] = count + collatz_length(3 * n + 1,0)
else:
len[n] = count + collatz_length(n >> 1,0)
return len[n]
print collatz_length(13,0)
我想弄清楚长度。但是给出错误
输出
Traceback (most recent call last):
File "collatz.py", line 21, in <module>
print collatz_length(13,0)
File "collatz.py", line 9, in collatz_length
if len[n]:
IndexError: list index out of range
答案 0 :(得分:2)
这意味着n
超出了列表的长度(最初为零)。您需要查看列表中是否有len[n]
,而不是n
:
# Renaming your array to my_array so that it doesn't shadow the len() function,
# It's also better to put it as a parameter, not a global
def collatz_length(n, count, my_array):
if n < len(my_array):
return my_array[n]
# ... all your elses
答案 1 :(得分:0)
如果你有一个包含5个内容的数组,并尝试访问数组[5],那么你正在读取数组的边界之外。我认为这就是正在发生的事情,但你的代码也很难理解。如果这不是正在发生的事情,您可能需要添加一些评论或以其他方式澄清您在做什么。看起来你有一个空数组并且正在尝试访问其中的位置13,这没有任何意义。