题目

Sum of Digits / Digital Root
数字和/数字根

描述

Digital root is the recursive sum of all the digits in a number.

数字根是一个数中所有数字的递归和。

Given n, take the sum of the digits of n. If that value has more than one digit, continue reducing in this way until a single-digit number is produced. The input will be a non-negative integer.

给定n,取n的数字之和。如果n大于1位,继续这样拆分,直到产生一个单位数。输入将是非负整数。

举例

16 --> 1 + 6 = 7

942 --> 9 + 4 + 2 = 15 --> 1 + 5 = 6

132189 --> 1 + 3 + 2 + 1 + 8 + 9 = 24 --> 2 + 4 = 6

493193 --> 4 + 9 + 3 + 1 + 9 + 3 = 29 --> 2 + 9 = 11 --> 1 + 1 = 2

思路

  • 首先肯定使用的递归的方式去做,为什么呢

因为只要大于1位数,处理方法都是一样的,就把这个数拆分,然后相加,然后判断,如果还是大于1位数,那么继续重复

  • 确定递归三部曲
  1. 确定递归函数的参数和返回值
    参数就是每次求和的值,返回值就是最后的求和值
def traversal(n):
  1. 终止条件,当传入的值为一位数的时候,就直接返回了
    if n < 10:
    return n
  1. 确定单层递归逻辑
    首先将出入的值,拆分然后进行求和,然后判断是否大于1位数,如果是就进行递归
    # 记录求和值
    sums = 0
    # 拆分n,进行求和
    while n > 0:
        sums += n % 10
        n = n // 10
    # 如果结果大于1位数,递归
    if sums > 9:
        sums = traversal(sums)

最终代码

def traversal(n):
    # 终止条件
    if n < 10:
        return n
    # 记录求和值
    sums = 0
    # 拆分n,进行求和
    while n > 0:
        sums += n % 10
        n = n // 10
    # 如果结果大于1位数,递归
    if sums > 9:
        sums = traversal(sums)
    return sums
def digital_root(n):
    sums = traversal(n)
    return sums