递归算法的运行时错误

时间:2014-07-30 14:36:59

标签: python python-3.x recursion

我试图提出一段代码来总结给定列表的每个可能组合。

class Answer:
    possible = False
    def addAll(self, added, rest, answer):
        if self.possible or added == answer:
            self.possible = True
        elif added < answer:
            for i in range(0, len(rest)):
                temp_rest= rest.copy()
                temp_rest.pop(i)
                self.addAll(added + rest[i], temp_rest, answer)        

n = int(input())
a = Answer()
for rep in range(0, n):
    note,cash = list(map(int,input().split()))
    notelist = []
    a.possible = False
    for x in range(0,note):
        notelist.append(int(input())) #insert tuple
    a.addAll(0,notelist, cash)
    if a.possible:
        print("Yes")
    else: print("No")

我认为这是一个混乱的代码,但它仍然正常,因为我自己尝试。 然而,似乎即使在打印完所有答案之后(&#34;是&#34;和&#34;否&#34;) 程序没有完成。我通过在末尾添加代码exit()来检查它,然后它提示程序仍在运行。

可能是因为这样,CodeChef问题http://www.codechef.com/problems/MARCHA1给出了NZEC运行时错误。无论如何要抛光这段代码? (我不想在python中使用排列函数)

1 个答案:

答案 0 :(得分:0)

def all_sums(x):
    s = set()
    all_sums_worker(x, s, 0)
    return s

def all_sums_worker(x, s, acc):
    if len(x) == 0:
        s.add(acc)
    else:
        all_sums_worker(x[1:], s, acc + x[0])
        all_sums_worker(x[1:], s, acc)

# the function all_sums(l) returns all possible sums of l