使用递归减少数字位数

问题描述

我正在努力应对编码挑战,并将这个问题用作使自己习惯于递归的一种方式。问题是给我一个整数n,该整数可以是任意长度,我的工作是将所有数字求和,直到成为单个数字,然后输出发生的次数

为说明起见,我们只说值是87559:

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

因此返回值为2。如果n为1,000,000,则返回值为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,str(n))))
  [PrevIoUs line repeated 9993 more times]
RecursionError: maximum recursion depth exceeded while getting the str of an object

解决方法

这就是为什么总是从基本情况开始的原因:您必须在某处停止递归。备份有关递归的基本知识:

  • 您怎么知道什么时候完成的?
  • 在这种基本情况下,您还能得到什么?
  • 当您从递归步骤过渡到其父步骤时,您需要累积什么信息?

这三个项目将帮助您解决问题。

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

,

您可以这样操作,并且“ 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)