递归后重置计数器

时间:2014-02-23 08:21:13

标签: python recursion global-variables counter

我正在处理一个递归函数,它意味着返回(不打印)字符串中字母字符的数量。我理解通过迭代很容易做到这一点,但我的目标是递归地做到这一点。我写的函数在第一次调用时正确执行,但是在下次执行之前我找不到重置计数器的方法。这就是我所拥有的:

counter = 0
def recAlphaCount(s):
    global counter

    if len(s) == 0:
        return 0 
    else:
        if s[0].isalpha():
            counter += 1

        recAlphaCount(s[1:])
        return counter

我已经尝试将计数器的值分配给另一个变量并重置计数器,但我无法设法提取其值并仍然重置它。

有没有办法在不使用全局计数器的情况下递归编写这个?或者有没有办法返回计数器并在函数内重置它?

由于

2 个答案:

答案 0 :(得分:2)

您可以在参数本身中维护计数,例如

def recAlphaCount(s, counter = 0):
    if len(s):
        counter = recAlphaCount(s[1:], counter + int(s[0].isalpha()))
    return counter

这也可以像这样解决,而不是明确地保持计数。

def recAlphaCount(s):
    if len(s) == 0:
        return 0
    elif s[0].isalpha():
        return 1 + recAlphaCount(s[1:])
    else:
        return recAlphaCount(s[1:])

这可以缩短为

def recAlphaCount(s):
    if len(s) == 0:
        return 0
    return int(s[0].isalpha()) + recAlphaCount(s[1:])

答案 1 :(得分:0)

global变量很少是正确的答案!您可以使counter参数默认为零并稍微重构:

def recAlphaCount(s, counter=0):
    if len(s) == 0:
        return counter
    else:
        if s[0].isalpha():
            counter += 1
        return recAlphaCount(s[1:], counter)