我编写了一个递归函数来查找列表中的(0,0)元组。
def find_tuple(l, score = 0):
for i, item in enumerate(l):
try:
if item == 0 and l[i+1] == 0:
score = score + 1
print("Number of tuples: {}".format(score))
l = l[i+2:]
find_tuple(l, score)
except:
break
return score
当我使用它时,我注意到了奇怪的行为:
>>> find_tuple([0,0])
Number of tuples: 1
1
>>> find_tuple([0,0,0])
Number of tuples: 1
1
>>> find_tuple([0,0,0,0])
Number of tuples: 1
Number of tuples: 2
1
>>> find_tuple([0,0,0,0,0,0])
Number of tuples: 1
Number of tuples: 2
Number of tuples: 3
Number of tuples: 2
2
在最后两个示例中,函数返回1而不是2和2而不是3。为什么会这样?
答案 0 :(得分:0)
您需要返回上一个函数调用的变量才能捕获它。
将find_tuple(l, score)
替换为return find_tuple(l, score)
语句
if
def find_tuple(l, score = 0):
for i, item in enumerate(l):
try:
if item == 0 and l[i+1] == 0:
score = score + 1
print("Number of tuples: {}".format(score))
l = l[i+2:]
return find_tuple(l, score)
except:
break
return score
答案 1 :(得分:0)
你的递归逻辑似乎对我不正确。您不需要在递归函数中使用for循环。您处理一部分工作,减少问题并再次调用相同的功能来解决问题。最后,使用函数返回的值。此外,你需要设置一个条件来停止。
这样的事情可以解决你的问题:
def find_tuple(l, score = 0):
if len(l)<=1:
return score
if l[0] == 0 and l[1] == 0:
score += 1
return find_tuple(l[2:], score)
print(find_tuple([0,0]))
print(find_tuple([0,0,0]))
print(find_tuple([0,0,0,0]))
print(find_tuple([0,0,0,0,0,0]))
输出:
1
1
2
3