在递归函数(python)中存储变量

时间:2017-10-23 11:04:39

标签: python python-3.x recursion

我编写了一个递归函数来查找列表中的(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。为什么会这样?

2 个答案:

答案 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