python - 递归后重置计数器

标签 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

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

有没有一种方法可以在不使用全局计数器的情况下递归地编写此代码?或者有没有办法返回计数器并在函数内重置它?

谢谢

最佳答案

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

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

关于python - 递归后重置计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21965881/

相关文章:

python - 加入并计算每个子类别中的值数量

algorithm - SICP 示例 : Counting change, 无法理解

haskell - 如何返回从列表前面删除指定数量元素的列表

java - 全局配置应该使用什么设计模式

python - 替代 opencv warpPerspective

javascript - 如何抓取页面的动态 URL?

Python:tile()返回奇怪的错误

javascript - 如何使用递归计算数组中数字的实例?

Javascript:动态命名的全局变量

postgresql - 是否可以在postgresql中定义全局变量