为什么此递归countOccurence函数不起作用?这有一个子程序。有没有子例程的方法吗?在javascript中,您似乎必须为counter变量有一个闭包(子例程函数),否则每次都会被重写!

function numOccurencesRecursive(arr, val) {
  //base case. check it if it only has a length of 1
  var count = 0;

  function doCount(arr, val) {
    if (arr[0] === val) {
      count++;
    } else {
      count += doCount(arr.slice(1), val)
    }
    return count;
  }

  return doCount(arr, val);
}

console.log(numOccurencesRecursive([2, 7, 4, 4, 1, 4], 4)); // should return 3 but returns 1

最佳答案

我认为问题是您在反复考虑,但使用了递归方法。

迭代方法具有全局变量,可以在每个步骤中进行更新:

function numOccurencesIterative(arr, val) {
  var count = 0;
  for(var i=0; i<arr.length; ++i) if(arr[i] === val) ++count;
  return count;
}

但是,在使用递归方法时,最好避免使用全局变量。

function numOccurencesRecursive(arr, val) {
  if(!arr.length) return 0;
  return (arr[0] === val) + numOccurencesRecursive(arr.slice(1), val);
}

关于javascript - 递归计算出现次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32302413/

10-09 20:06
查看更多