RecursionError: maximum recursion depth exceeded in comparison - sys.setrecursionlimit(1500)
RecursionError: maximum recursion depth exceeded in comparison - sys.setrecursionlimit(1500)
我正在使用递归进行 Python 练习。
目标是请求用户想要研究哪个最大值,并测试从 1 到这个最大值的所有值。该算法总是达到 1 或 4。当达到这些值时程序停止,然后 returns 这些值之一。
我想在这里使用递归方法,但我对最大递归深度有疑问。
该程序仅适用于数字 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 的最大递归深度扩展,但仍然无效。
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded in comparison
我也尝试过迭代方法,但我遇到了问题:
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)
在递归函数中添加一个简单的 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
,然后看看它做了什么。
我正在使用递归进行 Python 练习。 目标是请求用户想要研究哪个最大值,并测试从 1 到这个最大值的所有值。该算法总是达到 1 或 4。当达到这些值时程序停止,然后 returns 这些值之一。
我想在这里使用递归方法,但我对最大递归深度有疑问。
该程序仅适用于数字 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 的最大递归深度扩展,但仍然无效。
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded in comparison
我也尝试过迭代方法,但我遇到了问题:
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)
在递归函数中添加一个简单的 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
,然后看看它做了什么。