递归后重置计数器

2024-10-01 05:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我尝试将counter的值赋给另一个变量并重置计数器,但我无法提取它的值并将其重置。在

有没有一种方法可以不使用全局计数器递归地写这个呢?或者有没有一种方法可以返回计数器并在函数中重置它?在

谢谢


Tags: 方法函数字符串目标数量returnifdef
2条回答

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)

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

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

这也可以这样解决,而不必显式地维护计数。在

^{pr2}$

这可以简化为

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

相关问题 更多 >