-2

我正在应对编码挑战,我正在使用这个问题来让自己习惯递归。这个问题给了我一个任意长度的整数 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, 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
4

2 回答 2

0

这就是为什么你总是从基本情况开始:你必须在某个地方停止递归。回到你的递归基础:

  • 你怎么知道你什么时候完成?
  • 在那个基本情况下你会返回什么?
  • 当你从一个递归步骤过渡到它的父级时,你需要积累什么信息?

这三个项目将为您提供解决方案。

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

于 2020-09-26T00:57:26.557 回答
-2

你可以这样做&'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)
于 2020-09-26T03:27:47.120 回答