Python 递归后重置计数器

Python 递归后重置计数器,python,recursion,global-variables,counter,Python,Recursion,Global Variables,Counter,我正在研究一个递归函数,该函数用于返回(而不是打印)字符串中的字母字符数。我知道通过迭代很容易做到这一点,但我的目标是递归地做到这一点。我编写的函数在第一次调用时正确执行,但在下一次执行之前,我找不到重置计数器的方法。以下是我所拥有的: counter = 0 def recAlphaCount(s): global counter if len(s) == 0: return 0 else: if s[0].isalpha():

我正在研究一个递归函数,该函数用于返回(而不是打印)字符串中的字母字符数。我知道通过迭代很容易做到这一点,但我的目标是递归地做到这一点。我编写的函数在第一次调用时正确执行,但在下一次执行之前,我找不到重置计数器的方法。以下是我所拥有的:

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
我曾尝试将计数器的值赋给另一个变量并重置计数器,但我无法提取其值,但仍将其重置

有没有一种不使用全局计数器而递归写入的方法?或者是否有方法返回计数器并在函数中重置它


谢谢

您可以在参数本身中维护计数,如下所示

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:])

global
变量很少是正确答案!您可以将
计数器
设为默认为零的参数,并稍微进行重构:

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

这是一个好主意,但我的习题集严格预先定义了要使用的参数。谢谢,这很有见地。我不知道int(bool)返回0或1,这是一个很好的解决方案。谢谢