在递归中保持变量

2024-09-24 22:26:09 发布

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

我在一个数字中加上个别数字。我必须使用递归。问题是,如果不使用保持计数的holding变量,我就不知道如何做到这一点。我无法将count传递给函数,因为这可能导致用户错误。你知道吗

如果我在函数中声明count,那么在每次声明之后,值将被重新声明,从而删除其保留值。你知道吗

我无法将值存储在n本身中,因为它是整数而不是容器数据类型。我能做什么?你知道吗

def sumDigits(n):
    if count == 0:
        return count
    else:
        count += n%10
        sumDigits(n,count)

Tags: 函数声明defcount错误数字整数容器
2条回答

I cannot pass count to the function because that could lead to user error.

只需将其设置为默认值,并记录不应使用的文档。特别是在你的示例代码中,这就是你要做的。这通常就是解决这种递归问题的方法。如果要稍微隐藏它,可以使用**kwargs向用户隐藏关键字参数:

 def sumDigits(n, **kwargs):
     try:
         count = kwargs['count']
     except KeyError:
         count = 0
     ...
     return sumDidgets(n, count = count)

请注意,我使用**kwargs而不是*args来允许用户传递几乎任何他们想要传递给函数的检查,只要它不是count =,并让它按预期的方式运行。你知道吗

尝试将结果保存为函数的参数之一,并在函数的每次递归调用中更改它,使其在某个时候达到您的条件以结束递归。你知道吗

试试这个:

def sumDigits(n, acc = 0):
    if n == 0:
        return acc
    else:
        return sumDigits(n / 10, acc + n % 10)

应该这样称呼:

sumDigits(x)

其中x是输入整数。你知道吗

相关问题 更多 >