为什么此递归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/