在递归中保存变量

时间:2014-04-25 03:05:16

标签: python recursion

我在数字中添加个别数字。我必须使用递归来做到这一点。问题是如果不使用跟踪计数的保持变量,我无法弄清楚如何做到这一点。我无法将计数传递给函数,因为这可能导致用户错误。

如果我在函数内部声明count,那么在每次声明之后,将重新声明该值,从而删除其保持值。

我无法将值存储在n本身中,因为它是一个整数而不是容器数据类型。我该怎么办?

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

2 个答案:

答案 0 :(得分:1)

  

我无法将计数传递给该函数,因为这可能导致用户   错误。

只需将其设置为默认值并记录不应该使用它。特别是在您的示例代码中,这基本上就是您正在做的事情。这通常是您解决这种递归问题的方法。如果您想略微模糊它,可以使用**kwargs向用户隐藏关键字参数:

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

请注意,我使用**kwargs代替*args,只要它不是count =,用户就可以通过他们想要的功能。让它按预期行事。

答案 1 :(得分:1)

尝试将保存结果作为函数的参数之一,并在函数的每次递归调用中更改它,以便在某些时候它应该达到结束递归的条件。 / p>

试试这个:

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

应该像这样调用:

sumDigits(x)

其中x是输入整数。