大佬教程收集整理的这篇文章主要介绍了制作强数字程序时的最大递归部门错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我被要求编写一个程序,如果当前数字不是强数字,但我得到最大深度误差,该程序将找到下一个强数字。
我的代码
def solution(n):
m = str(n)
dig = map(int,m)
digits = List(dig)
sum = 0
factorial = 1
for i in digits:
if i == 0:
sum += 1
else:
for i in range(1,i + 1):
factorial = factorial*i
sum += factorial
if sum == n:
return sum
elif sum != n:
solution(n + 1)
print(solution(140))
您的问题是您使用的是递归函数。 Python 只允许如此多的递归。您可以改用循环:
def solution(n):
while True:
m = str(n)
dig = map(int,m)
digits = list(dig)
mysum = 0
factorial = 1
for i in digits:
if i == 0:
mysum += 1
else:
for i in range(1,i + 1):
factorial = factorial*i
mysum += factorial
if mysum == n:
return mysum
elif mysum != n:
mysum = 0
n = n + 1
print(solution(140))
修复代码中的其他错误后,它看起来像这样:
def solution(n):
while True:
m = str(n)
dig = map(int,m)
digits = list(dig)
mysum = 0
for i in digits:
factorial = 1 # Needs to be set to 1 for every iteration
if i == 0:
mysum += 1
else:
for x in range(1,i+1):
factorial = factorial * x
mysum += factorial
if mysum == n:
return mysum
elif mysum != n:
mysum = 0
n = n + 1
print(solution(140)) # prints 145
print(solution(146)) # prints 40585
也不要使用 sum
作为变量名,因为它是一个内置函数。
以下更正允许发布的代码运行
solution(n +1)
不返回值代码中突出显示的更正。
代码
#-------------------------------------------------------
# Decorator class to allow for optimized tail recursion
#-------------------------------------------------------
class Recurse(Exception):
def __init__(self,*args,**kwargs):
self.args = args
self.kwargs = kwargs
def recurse(*args,**kwargs):
raise Recurse(*args,**kwargs)
def tail_recursive(f):
def decorated(*args,**kwargs):
while True:
try:
return f(*args,**kwargs)
except Recurse as r:
args = r.args
kwargs = r.kwargs
conTinue
return decorated
#-------------------------------------------------------
# Corrected code and revised to use tail call optimization
#-------------------------------------------------------
@tail_recursive
def solution(n):
m = str(n)
dig = map(int,m)
digits = list(dig)
sum_ = 0 # Correction: don't use sum as a variable name since it's a built-ini
for i in digits:
if i == 0:
sum_ += 1
else:
# Factorial of digit i
factorial = 1 # Correction: Reset value to 1
for i in range(1,i + 1):
factorial = factorial*i
sum_ += factorial
if sum_ == n:
return sum_
elif sum_ != n:
# Recursive call using recurse which provides tail call optimization
return recurse(n + 1)
测试
for n in range(140,150):
print(f'n = {n},next strong number: {solution(n)}')
输出
n = 140,next strong number: 145
n = 141,next strong number: 145
n = 142,next strong number: 145
n = 143,next strong number: 145
n = 144,next strong number: 145
n = 145,next strong number: 145
n = 146,next strong number: 40585
n = 147,next strong number: 40585
n = 148,next strong number: 40585
n = 149,next strong number: 40585
以上是大佬教程为你收集整理的制作强数字程序时的最大递归部门错误全部内容,希望文章能够帮你解决制作强数字程序时的最大递归部门错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。