Python递归长度太长了?

时间:2015-03-24 15:43:25

标签: python recursion

我正在处理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;找到产生最大总和并返回该总和的路径

1 个答案:

答案 0 :(得分:0)

试试这个:

import sys
sys.setrecursionlimit(5000)

Python的限制是1000我相信