【问题标题】:Recursively sum a list and compare it to a key in python递归求和列表并将其与python中的键进行比较
【发布时间】:2015-10-13 10:07:51
【问题描述】:

我需要编写一个递归函数 sums_to(nums, k),它接受一个整数列表,如果列表中所有元素的总和等于 k,则返回 True,否则返回 False。

我不能以任何形式使用 sum 函数,也不能对列表求和,然后在最后检查它是否等于 k。此外,我必须将 sums_to 编写为单个递归函数。

到目前为止,我有这个:

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

【问题讨论】:

  • 我已努力修复您的缩进,它似乎已错误地粘贴到问题中 - 请确认我所做的与您的意图相符。

标签: python recursion


【解决方案1】:

您的方法似乎不正确,特别是递归步骤不正确 - 您必须减少预期的 k 值,直到我们到达列表末尾(此时仅测试 k! ),而不是在列表的每个点添加/比较。此外,基本情况缺少一些东西——如果k 为零会发生什么?你应该返回False,而不是0。最好试试这个:

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

它按预期工作:

sums_to([1, 2, 3, 4, 5], 14)
=> False
sums_to([1, 2, 3, 4, 5], 16)
=> False
sums_to([1, 2, 3, 4, 5], 15)
=> True

【讨论】:

  • 你能添加如何为 3 个数字执行此操作吗?
  • @DataTx 你是什么意思?发布示例输入和预期输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2021-12-13
  • 2020-05-13
相关资源
最近更新 更多