2015-11-18 28 views
0

我從學校這個問題的工作,我寫我認爲功能是正確的(我們需要使用遞歸無環路)如何調試這個遞歸函數蟒蛇

def subset_sum(numbers, target): 
    ''' 
    numbers - a list of positive integers 
    target - a non-negative integer 
    returns True if the list 'numbers' has a sub-list with sum 'target', 
      False otherwise. 
    ''' 
    # Your code for question #4 starts here 
    if sum(numbers[1:]) == target or target == 0: 
     return True 
    if sum(numbers[1:]) == (target - numbers[0]): 
     return True 
    if len(numbers) == 1 and numbers[0] == target: 
     return True 
    if len(numbers) == 1 and numbers[0] != target: 
     return False 
    else: 
     subset_sum(numbers[1:], target) 

對於一些投入得到正確的輸出,如subset_sum([4,4,4], 12)subset_sum([4,4,4], 8),但subset_sum([4,4,4], 4)我得不到輸出。

有人可以看看並告訴我這裏有什麼問題嗎? 當它沒有給出任何輸出時,沒有錯誤,只是空白。

+0

我不知道你目前的解決方案,甚至從馬上修正滿足你已經給予了要求。 – quamrana

+0

@quamrana它沒有......但我不明白爲什麼.. – Beginner

回答

3

你必須在else分支返回subset_sum結果:

else: 
    return subset_sum(numbers[1:], target) 
+1

這可以通過刪除'else:'來簡化,只留下返回。 – quamrana

+0

完成!但現在我得到了錯誤的輸出:'subset_sum([1,2,3,4],6)'。任何想法爲什麼? – Beginner

+1

@Beginner,是的,但爲了讓你學習,你應該回到你的老師或爲自己工作。 (提示:也許你可以自己手動查找給定列表的所有子列表,並嘗試找出遞歸程序如何找到它們) – quamrana