我在数字中添加个别数字。我必须使用递归来做到这一点。问题是如果不使用跟踪计数的保持变量,我无法弄清楚如何做到这一点。我无法将计数传递给函数,因为这可能导致用户错误。
如果我在函数内部声明count,那么在每次声明之后,将重新声明该值,从而删除其保持值。
我无法将值存储在n本身中,因为它是一个整数而不是容器数据类型。我该怎么办?
def sumDigits(n):
if count == 0:
return count
else:
count += n%10
sumDigits(n,count)
答案 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
是输入整数。