【问题标题】:count ways of total Sum that contain numbers 1 till N in Javascript在Javascript中计算包含数字1到N的总和的方式
【发布时间】:2021-06-01 14:09:02
【问题描述】:

给定一个总数作为总数,我需要计算表示 1 和 k(含)之间总数的方法数。 假设 sum = 8 和 tillMax = 2; 应该是这样的

  • [1,1,1,1,1,1,1,1]
  • [1,1,1,1,1,1,2]
  • [1,1,1,1,2,2]
  • [1, 1, 2, 2, 2]
  • [2,2,2,2]

8 从 1 到 tillMax 的总和大约是 5 种方式

我试过了,但总是零

function waysTosum(n, tillMax) {
  let counter = 0;
  if(n == 0) {
    return counter++
  }

  for (let i = Math.min(tillMax,n); i >= 1; i--) {
    waysTosum(n- 1, i)
  }

  return counter
}

console.log(waysTosum(8, 2))

我的递归有什么问题吗?

【问题讨论】:

  • 您没有捕获递归调用的输出。对waysTosum(n-1, i) 的输出做一些事情。
  • 它总是 0 i console.log
  • 它总是返回0的原因是你没有在for语句中更新counter;因此,计数器仍然是0
  • 另外,counter 在执行for 语句时总是重置为0 evrytime waysTosum()
  • i 控制台waysTosum(n-1, i) 总是0 这就是我不知道的原因:(

标签: javascript recursion ecmascript-6


【解决方案1】:

问题 1

for 语句中,您不更新counter;因此,counter 保持为 0,即在函数开头设置的值。

问题 2

每次执行waysTosum(n- 1, i)counter总是被let counter = 0重置为0。


这是我的解决方案:

function waysTosum(n, tillMax) {
  if (tillMax > n) tillMax = n;

  let arr = Array(n).fill(1)
  let count = 1;

  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; arr[i] < tillMax; j++) {
      count++;
      let lastNum = arr.pop();
      arr[i] += lastNum;
    }
  }

  return count;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2013-11-12
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多