不存在递归函数
Not exiting recursive function
我正在编写一个函数,它需要两个列表,第二个列表与第一个列表相同,只是它被洗牌并删除了一个元素。函数应该返回缺失的元素。我写了这个函数
var findRemoved = function(firstArr, secondArr, indx){
var indx = indx || 0;
for(var i = 0; i<secondArr.length; i++){
if(firstArr[indx] === secondArr[i]){
findRemoved(firstArr, secondArr, ++indx);
}
}
console.log("found end ", firstArr[indx]);
return firstArr[indx];
}
当我用
运行时var i = findRemoved([1,2,3,4,5,6,7], [5,4,2,6,1,3]);
console.log("i ",i);
我得到它控制台日志记录"发现结束",7,这是正确的,但是递归不会在那一点上中断,并继续进行,直到它返回的答案"2"任何想法我可能做错了?
您的代码在找到结果时继续运行,因此对于每个索引都保持循环并返回该索引。您可以返回来自递归的索引,并在发现第一个数组在第二个数组中出现时停止循环。
注意:我没有试着写一个好的实现,只是修改你的。
var findRemoved = function(firstArr, secondArr, indx){
var indx = indx || 0;
var result = null;
for(var i = 0; result==null && i<secondArr.length; i++){
if(firstArr[indx] === secondArr[i]){
result = findRemoved(firstArr, secondArr, ++indx);
}
}
result = result || firstArr[indx]
console.log("found end ", result);
return result;
}
var i = findRemoved([1,2,3,4,5,6,7], [5,4,2,6,1,3]);
console.log("i ",i);
看一下:http://jsfiddle.net/b5Aus/
你试过这样的方法吗?
var findRemoved = function(firstArr, secondArr){
for(var i=0, l=firstArr.length; i<l; ++i)
if(secondArr.indexOf(firstArr[i]) < 0)
return firstArr[i];
}
相关文章:
- 递归函数返回不正确
- 返回不会退出 javascript 中的递归函数
- 我怎样才能把它变成一个循环,而不是一个递归函数
- JavaScript:递归函数不能正常工作
- 递归函数在javascript中不返回Label
- 为什么我在下面的递归函数中得到“X 不是函数”
- 承诺的递归函数不会触发返回语句
- 递归函数使用 jQuery 每个变量值不更新
- 动画结束在递归函数中不起作用
- 函数的递归调用不会被执行
- 递归函数不返回对象值的和
- javascript settimeout在递归函数中不起作用
- 递归函数(迷宫求解器)-can'找不到漏洞;()
- 在递归函数中不能调用回调函数
- 简单的javascript递归函数返回的值比实际存在的值多
- 找不到封装在匿名函数中的递归函数调用
- 不能在递归函数中返回变量
- 递归函数不能工作
- js 递归函数不返回正确的子对象
- 不存在递归函数