我递归地计算一个数字的位数之和,直到总和小于10。比如,
99999->45->9
因为最后的数字和是9,所以我们停止。据我所知,我知道以下递归方法效果良好
第一种方法
def sumdigits(n):
if n//10==0:
return n
q,r=divmod(n,10)
return sumdigits(q+r)
但是我试图用两个递归函数来编写它,以便学习一种不同的方法。这是我的第二种方法
第二种方法
def digitalRoot(n):
def sumdigits(n):
if n==0:
return 0
q,r=divmod(n,10)
return r+sumdigits(q)
s=sumdigits(n)
if s//10==0:
return s
q,r=divmod(s,10)
return r+sumdigits(q)
如图所示,我正在尝试编写一个单独的检查数字总和是否小于10。它适用于计算级别最多为2的情况。
例如n=99999
给出的和为99999->45->9
但是如果我们有像n=27640
这样的例子,正确的输出应该是1,因为27640->19->10->1.
但是我的代码在第二级停止,并且给出的答案是10.
我可以得到一些帮助来修改我的第二个代码以解决这个问题吗?提前谢谢
您可以使用sum()和map()从数字的字符串版本中获取数字之和
然后递归只需检查结果是否小于10:
或者在一行上:
问题是,您最多只能在两个级别上进行计算。在任何情况下,你都没有对逻辑进行编码,即“在我们得到少于10个答案之前一直这样做。”所以……让我们这样做吧
Hans已经提供了一个迭代解决方案,可以满足您的需求,这里是一个递归方法
你做得很对,但正如汉斯指出的那样,“你从来没有对逻辑进行编码,这样做直到我们得到的答案少于10。”。只是将该条件添加到代码已经执行的操作中
相关问题 更多 >
编程相关推荐