使用递归减少数字的位数

Using recursion to reduce digits of a number

我正在应对编码挑战,我正在使用这个问题来让自己习惯递归。问题给了我一个任意长度的整数 n,我的工作是对所有数字求和,直到它变成一个数字,然后输出发生的次数。

为了说明,假设值为 87559:

8+7+5+5+9 = 34
3 + 4 = 7

所以 return 值为 2。如果 n 为 1,000,000,则 return 将为 1。

我觉得这是一个递归问题,所以我试图让那部分先工作。这是我的代码:

def digitDegree(n):
    
    return digitDegree(sum(map(int, str(n)))

然而,这是错误的:

Traceback (most recent call last):
  main.py3 in the pre-written template, in getUserOutputs
    userOutput = _runlnlao(testInputs[i])
  main.py3 in the pre-written template, in _runlnlao
    return digitDegree(*_fArgs_qeqrszlgdnyi)
  main.py3 on line 13, in digitDegree
    return digitDegree(sum(map(int, str(n))))
  main.py3 on line 13, in digitDegree
    return digitDegree(sum(map(int, str(n))))
  main.py3 on line 13, in digitDegree
    return digitDegree(sum(map(int, str(n))))
  [Previous line repeated 9993 more times]
RecursionError: maximum recursion depth exceeded while getting the str of an object

这就是为什么您总是从基本情况开始:您必须在某处停止递归。回到递归的基础知识:

  • 你怎么知道什么时候完成的?
  • 你 return 在那个基本情况下是什么?
  • 当您从递归步骤返回到其父级时,您需要积累哪些信息?

这三个项目将帮助您找到解决方案。

编码留给学生作为练习。 :-)

你可以这样做 & 'times' 会显示递归发生的次数

def recurtion_function(x):
    global times
    times += 1
    num = 0
    while x != 0:
        num += x % 10
        x = x // 10
    if num > 10:
        recurtion_function(num)

var = int(input("enter the number:"))
times = 0
recurtion_function(var)
print(times)