【问题标题】:How to debug this recursion function python如何调试这个递归函数python
【发布时间】:2015-11-18 11:21:32
【问题描述】:

我在学校研究这个问题,我写了我认为正确的函数(我们需要使用没有循环的递归)

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),我没有输出。

有人可以看看并告诉我这里有什么问题吗? 当它没有给出任何输出时,没有错误,只是空白。

【问题讨论】:

  • 我不确定您提出的解决方案,即使很快进行了更正,也能满足您的要求。
  • @quamrana 它没有......但我不明白为什么......

标签: python list function recursion


【解决方案1】:

您必须在else 分支中返回subset_sum 的结果:

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

【讨论】:

  • 这可以通过删除else:来简化,只留下返回。
  • 完成!但现在我得到了错误的输出:'subset_sum([1,2,3,4], 6)'。知道为什么吗?
  • @Beginner,是的,但是为了让您学习,您应该回到老师那里或自己解决。 (提示:也许您可以自己手动查找给定列表的所有子列表,并尝试找出递归程序如何找到它们)
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多