【问题标题】:Digital root of a number using recursion使用递归的数字的数字根
【发布时间】:2020-02-18 16:10:37
【问题描述】:

我正在编写一个递归函数来计算给定数字的数字根:

def digital_root(num):
    sum = 0
    while num > 0:
        sum += num % 10
        num = num // 10

    while sum > 10:
        sum = digital_root(sum)

    return sum

我不确定第二个while 是否应该替换为if 语句,如果是,为什么? (如果没有,为什么不呢?)

当我尝试两个版本时,返回值是相同的。 例如,对于数字10598,两者的输出都是5

【问题讨论】:

  • 举个例子输入输出。
  • @DontBe3Greedy 我添加了示例和更多解释ץ
  • ...我的答案是对还是错?
  • @DontBe3Greedy 它工作正常,但这不是我要问的。

标签: python numbers digits


【解决方案1】:

如果它适用于人们不接受我的解决方案,请确保接受答案

def digital_root(num):
    #Base case for recursion.
    # recursion always needs a base case
    if len(str(num)) == 1:
        return num
    #Get sum of num by turning it into a string and looping through it, 
    #adding each index one by one
    sum = 0
    for i in str(num):
        sum += int(i)
    #get the digital root of the sum
    return digital_root(sum)


def main():
    print(digital_root(27518))



if __name__ == '__main__':
    main()

你来了

【讨论】:

    【解决方案2】:

    所以,首先,请想想你在问什么。

    if 与某个条件相关,while 与某个条件成立时执行重复动作。

    数字根递归仅在结果数字和小于 10 时停止。

    【讨论】:

      【解决方案3】:

      对于递归的基本情况,我们需要“if”。 但是在这种特殊情况下,您将“while”用作“if”并且有效。但为了可读性,最好使用“if”。

      它起作用的原因:

      “while”和“if”都有条件 它们之间的区别只是循环指令

      由于递归,它会再次相同。

      我的意思是在这种特殊情况下,由于我们有递归,“if”的行为就像“while”

      【讨论】:

        【解决方案4】:

        这是使用递归计算数字根的另一个答案:

        
        def digital_root(n):
            if(n < 10):
                return n
            n=n%10+digital_root(n//10)
            return digital_root(n)
        
        

        【讨论】:

        • 通常没有解释的代码块不是一个很好的答案。如果您能告诉我们为什么我们应该尝试此代码以及为什么它会/可能对操作有所帮助,它对社区的帮助会更大。谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        • 2018-03-12
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多