我正在处理checkio.org问题并且我已经构建了一个使用recurssion的解决方案,除非它在第8次测试中运行时出现此错误:
RuntimeError: maximum recursion depth exceeded while calling a Python object, count_gold, 16, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29, count_gold, 29,
我截断了结束,但它持续了很长时间。我认为这是对递归工作方式的一个基本误解。最初我非常不愿意发布我的代码,因为我不想给出答案,但我想如果我没有把这个问题联系起来,那么我的代码就会在默默无闻中丢失。所以我们走了:
def mystery_function(pyramid, perm=0, lastmax=0, result = [], running=False):
if not running:
result = []
bitstr = bin(perm).zfill(len(pyramid)+1)
bitstr = bitstr.replace("b","")
j, newmax = 0, 0
for i in range(len(pyramid)):
j += int(bitstr[i])
newmax += pyramid[i][j]
maxpermute = "1"*(len(pyramid))
result.append(newmax)
if newmax < lastmax:
nextmax = lastmax
else:
nextmax = newmax
if perm < int(maxpermute,2):
mystery_function(pyramid, perm+1, nextmax, result, True)
return max(result)
就像我说的那样,我认为问题在于我只是不完全理解递归。我读过这篇文章:Python RuntimeError: maximum recursion depth exceeded但它似乎并不适用,因为我的递归将分解为基本情况并停止。
有什么想法吗?对于那些感兴趣的人(并根据我的函数知道问题),递归在测试8中失败。
注意:在功能中,&#34;金字塔&#34;是元组的元组,长度在1到20个元组之间。我们应该穿越金字塔&#34;找到产生最大总和并返回该总和的路径
答案 0 :(得分:0)
试试这个:
import sys
sys.setrecursionlimit(5000)
Python的限制是1000我相信