我很乐意为您提供帮助。在Python中递归的子集总和
我有以下问题:
我提供的数字seq
列表和目标号码,我需要写两件事情:
递归解决方案,返回
True
如果有是等于目标号码的子序列的总和,否则为False
。 例如:subset_sum([-1,1,5,4],0) # True subset_sum([-1,1,5,4],-3) # False
其次,我需要编写使用的是什么我在以前的解决方案 写了一个解决方案,但现在的memoization使用字典中的键的元组:
(len(seq),target)
对于1号这是我迄今:
def subset_sum(seq, target):
if target == 0:
return True
if seq[0] == target:
return True
if len(seq) > 1:
return subset_sum(seq[1:],target-seq[0]) or subset_sum(seq[1:],target)
return False
不知道我如果我能得到一些意见,我会很感激。
对于2号:
def subset_sum_mem(seq, target, mem=None):
if not mem:
mem = {}
key=(len(seq),target)
if key not in mem:
if target == 0 or seq[0]==target:
mem[key] = True
if len(seq)>1:
mem[key] = subset_sum_mem(seq[1:],target-seq[0],mem) or subset_sum_mem(seq[1:],target,mem)
mem[key] = False
return mem[key]
我不能让记忆化给我正确的答案,所以我会很高兴在这里的一些指导。
感谢任何人愿意帮忙!
你不只是使用['@ memoize'(任何原因http://wiki.python.org/moin/PythonDecoratorLibrary# memoize的)? –
可能是因为它是功课;) –
如果这实际上是功课,请标记为功课。人们仍然会提供帮助。这是一种很好的形式,可以帮助人们了解你来自哪里。 – istruble