0

我正在使用递归进行 Python 练习。目标是请求用户想要研究哪个最大值,并测试从 1 到该最大值的所有值。该算法总是达到 1 或 4。当达到这些值时程序停止,然后返回其中一个值。

我想在这里使用递归方法,但最大递归深度存在问题。

该程序仅适用于数字 1 和 2 :

C:\Users\Mathieu\Desktop
λ python algo.py
Enter a number > 0 1
vect1 =  [1]
vect4 =  []

C:\Users\Mathieu\Desktop
λ python algo.py
Enter a number > 0 2
vect1 =  [1]
vect4 =  [2]

我已经提出建议,要求将我已经扩展到 1500 的最大递归深度扩展到 1500,但这仍然不起作用。

[上一行重复了 996 次]

RecursionError:比较超过最大递归深度

我也尝试过迭代方法,但我有问题:

  def recursive(s, n):
        while n != 0:
            s = s + (n % 10)**2
            n = n // 10
        if s == 1 or s == 4:
            return s
        else:
            return recursive(s, n)

你有什么建议或技巧吗?先感谢您

import sys
sys.setrecursionlimit(1500)

class Error(Exception):
    """ Base class for exceptions """
    pass

class StrictlypPositive(Error):
    """ Called when the number is lower than 1 """
    pass

def recursive(s, n):
    if s == 1 or s == 4:
        return s
    else:
        s = s + (n % 10)**2
        n = n // 10
        return recursive(s, n)

vect1 = []
vect4 = []

while True:
    try:
        maxVal = int(input("Enter a number > 0 ").strip('n'))
        if maxVal < 1:
            raise StrictlypPositive
        break
    except ValueError:
        print("Enter a number")
    except StrictlypPositive:
        print("Enter a number strictly positive")

for val in range(1, maxVal + 1):
    theSum = 0
    theSum = recursive(theSum, val)
    if theSum == 1:
        vect1.append(val)
    else:
        vect4.append(val)

print("vect1 = ", vect1)
print("vect4 = ", vect4)
4

1 回答 1

1

在递归函数中添加一个简单print的函数揭示了一个无限循环。

Enter a number > 0: 3
recurse: s 1, n 0
recurse: s 4, n 0
recurse: s 9, n 0
recurse: s 9, n 0
recurse: s 9, n 0
recurse: s 9, n 0
recurse: s 9, n 0
recurse: s 9, n 0
recurse: s 9, n 0
recurse: s 9, n 0

目前尚不清楚计算应该正确产生什么,但是当新值与旧值相同时不递归至少应该避免直接症状。

在一般情况下,当代码没有按照您的预期执行时,请print在您认为出错的地方添加一个,然后看看它做了什么。

于 2020-11-11T10:30:14.710 回答