2017-07-23 52 views
-3

儘管看起來並不困難,但卻讓我發瘋。 我甚至無法接近答案。 你們可以幫我嗎?對列表中的元素進行求和的遞歸函數

寫遞歸函數sums_to(nums, k)這需要一個整數列表,並返回True如果列表中的所有元素的 總和等於k否則返回False。 例子:

>>> nums = [1, 2, 3] 
>>> sums_to(nums, 6) 
True 
>>> sums_to(nums, 5) 
False 
>>> sums_to([], 1) 
False 

注意:您是不是允許使用任何蟒蛇SUM函數以任何形式,也不總結列表,然後在 結束檢查它是否等於ķ。另外,你必須寫sums_to作爲一個遞歸函數: 也就是說,你不可以使用主函數和遞歸輔助函數。

# my pool code 
def sums_to(nums, k): 
    if nums == []: 
     return False 

    if nums[0] + sums_to(nums[1:], k) == k: 
     return True 

這是我試過至今。

+1

請出示你已經嘗試了什麼並問一個更具體的問題,你有什麼困難。 – lurker

+0

你忘了添加你到目前爲止嘗試過的代碼,如果你添加它,更好 –

回答

1

不幸的是,我想不出一個提示。整個問題是關於return語句:

def sums_to(nums, k): 
    if not nums: 
     return k == 0 
    return sums_to(nums[:-1], k - nums[-1]) 

print(sums_to([1, 2, 3], 6)) 
print(sums_to([1, 2, 3], 5)) 
print(sums_to([], 1)) 
+0

哦,我的上帝......我應該習慣布爾事物。 –

1

爲此,您可以使用遞歸,你有兩種情況,如果列表是空的,或者不是:

def sums_to(nums , n): 
    if len(nums) == 0: 
    return n == 0 
    else: 
    m = nums[0] 
    nums.pop(0) 
    return sums_to(nums, (n-m)) 

print(sums_to([2,3], 5))