问题描述
我正在努力应对编码挑战,并将这个问题用作使自己习惯于递归的一种方式。问题是给我一个整数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)