【问题标题】:RECURSIVE function that will sum digits of input将输入数字求和的 RECURSIVE 函数
【发布时间】:2017-04-18 01:23:34
【问题描述】:

尝试编写一段代码,将数字的位数相加。另外我应该补充一点,我希望程序继续对数字求和,直到总和仅为 1 位。

例如,如果以1969开头,则应先加1+9+6+9得到25。由于25的值不止一位,因此应重复运算得到7作为最终答案.

只是想知道我如何才能实现这一点,并可能使其递归。这就是我目前所拥有的

def sum_digits3(n):
     r = 0
     while n:
         r, n = r + n % 10, n // 10
     return r   

【问题讨论】:

标签: python function python-3.x recursion


【解决方案1】:

这就像明确地涉及递归一样简单。

def sum_digits3(n):
    r = 0
    while n:
        r, n = r + n % 10, n // 10
    if len(str(r))>1:
        return sum_digits3(r)
    return r

但我必须承认,我将阅读可疑狗提供的链接。而且二战的答案比我聪明。

【讨论】:

    【解决方案2】:

    在字符串和整数之间来回转换,使用 sum()。

    >>> def foo(n):
        n = str(n)
        if len(n) == 1:
            return int(n)
        return foo(sum(int(c) for c in n))
    
    >>> foo(1969)
    7
    >>> 
    

    def foo(n):
        n = str(n)
        if len(n) == 1:
            return int(n)
        return foo(sum(int(c) for c in n))
    

    【讨论】:

    • @leaf,对不起,从 Idle 复制和粘贴 - 以这种方式在 Idle 中输入它,它就可以工作。一个我可以没有的空闲功能。
    • 没关系。但由于某种原因,它在我的 IDLE 中运行良好。我想你的意图很好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多