【发布时间】:2016-04-17 10:33:19
【问题描述】:
我正在尝试在 Python 中做一个递归程序,它返回等于它的值的列表的第一个索引,例如:[0,1,5,6] 返回 0。但是当我通过最后一个列出它返回1,我不知道为什么。
代码:
def index(list):
"""Returns the first index of the list where list[i] == i"""
return __auxindex(list, 0, len(list) - 1)
def __auxindex(list, start, end):
if start < end:
half = (start + end) // 2
if list[half] == half:
return half
elif list[half] > half:
return __auxindex(list, start, half)
else:
return __auxindex(list, half + 1, end)
else:
return start
list = input('Values (, ): ').split(', ')
list = [int(i) for i in list]
print(index(list))
编辑:我忘记了必须对列表进行排序。所以这段代码有效。
【问题讨论】:
-
它是总是这样做,还是只针对某些输入?如果是后者,是哪些?无论哪种情况,它应该返回什么?
-
有时会这样,当我第一次通过 [0, 1, 5, 6] 时它返回 0,但当我再次通过时返回 1
-
不要使用列表作为变量名,如果匹配索引处没有元素怎么办?我也得到 1
[0, 1, 5, 6]而不是 0 -
当递归函数不能满足您的要求时,添加一两个打印调用会很有帮助,以确保每个递归调用中的参数都是您期望的。请参阅here 了解我前几天写的一个简单示例。
-
但是,我真的看不出这里使用递归的意义。您想要第一个
i和lst[i]==i,所以简单的线性搜索是自然的解决方案。
标签: python