我在学校就在研究这个问题,我写了一个我认为正确的函数(我们需要使用没有循环的递归)
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)
,我没有得到输出。
有人能看看并告诉我这里出了什么问题吗?当它没有给出任何输出时,就没有错误,只是空白。
您必须在else
分支中返回subset_sum
的结果:
else:
return subset_sum(numbers[1:], target)