我很樂意爲您提供幫助。在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