首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有人能给我解释一下canSum吗

有人能给我解释一下canSum吗
EN

Stack Overflow用户
提问于 2022-11-01 00:46:14
回答 1查看 50关注 0票数 0

问题指出:

编写了一个函数canSum(targetSum, numbers),它接受一个targetSum和一个数字数组作为参数。该函数应该返回一个布尔值,指示是否可以使用数组中的数字生成targetSum。您可以根据需要多次使用数组的元素。你可以假设所有的数字都是非负的。

在我正在观看的动态编程视频中,解决方案是:

代码语言:javascript
运行
复制
const canSum = (targetSum, numbers) => {
  if (targetSum === 0) return true;
  if (targetSum < 0) return false;

  for (let num of numbers) {
    const remainder = targetSum - num;
    if (canSum(remainder, numbers) === true) {
      return true;
    }
  }

  return false;
}

我理解这段代码是如何与canSum(7, [2, 3])这样的许多场景一起工作的。然而,我不明白这篇文章:if (targetSum === 0) return true;,这意味着canSum(0, [2, 3])将导致true。根据这个问题,这段代码不应该这样工作。我在这里错过了什么?

谢谢

代码语言:javascript
运行
复制
console.log(canSum(7, [2, 4]))

导致假的

然而,

代码语言:javascript
运行
复制
console.log(canSum(0, [2]))

结果是真的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 00:54:49

当它说你可以任意多次使用任何数字时,这包括使用所有数字零次,当你这样做的时候,和是0。使用这作为递归的基本情况简化了算法,因为您一直在减去直到到达0为止。

另一种方法是使用numbers.includes(targetSum)作为基本情况。它们是等价的,因为当这是真的时,for循环的迭代之一将remainder设置为0,递归调用将具有targetSum === 0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74270410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档