def index(L,v)
''' Return index of value v in L '''
pass
我需要帮助使用递归来实现这个函数。 对于递归的东西真的很新,所以任何建议都会有所帮助。!
请注意,L
是一个列表。 v
是一个值。
答案 0 :(得分:2)
有效
def recursive_index(L, v):
return 0 if L[0] == v else 1 + recursive_index(L[1:], v)
但非常愚蠢(并且仅在值存在时才有效)
您可以添加if v not in L: return -1
以使其适用于任何情况,但这甚至是最糟糕的。
它真的必须递归吗?
答案 1 :(得分:1)
为什么有人会为此编写递归代码?
>>> [1,2,4,8].index(4)
2
答案 2 :(得分:1)
我认为这是作业。
所以你需要了解递归。这是一个例子:
def countdown(n):
if n == 0:
print "Hello World!"
else:
print n
countdown(n-1)
你需要从一个起点开始,在你的情况下,它可能是第0个元素。
您需要一个终点,该终点应该是length - 1
或找到元素时。
如果还有其他事情应该在这里做,如上所述,使用修改后的倒计时版本。
答案 3 :(得分:1)
另一种方式:
def rec(l,v, index=0):
try:
if l[index] == v:
return index
except IndexError:
return -1
return rec(l,v,index+1)
答案 4 :(得分:0)
L = [1, 2, 3, 4, 5, 6, 7, 11, 13]
def index(L, v):
if len(L) == 0:
return -1000000
elif L[0] == v:
return 0
else:
return 1 + index(L[1:], v)
print index(L, 7)
print index(L, 13)
print index(L, 100)
*远程口译员重新初始化*
6
8
-999991
答案 5 :(得分:0)
假设0索引,下面的代码将返回元素的索引(如果它存在),如果它不包含在列表中,则返回-1:
def index(L, v):
if L == []:
return -1
elif L[0] == v:
return 0
rv = index(L[1:], v)
if rv < 0:
return rv
return rv + 1
答案 6 :(得分:0)
这是一个尾递归版本:
def indexof(elem, list_):
return indexof_tailrec(elem, list_, 0)
def indexof_tailrec(elem, list_, index):
if index >= len(list_):
return None
if list_[index] == elem:
return index
return indexof_tailrec(elem, list_, index + 1)
但请注意,Python没有尾调用优化(至少不是我所知道的)。
答案 7 :(得分:0)
使用二分搜索查找元素第一次出现的递归解决方案是这样的 -
/proc/self/maps