不存在递归函数

Not exiting recursive function

本文关键字:递归函数 不存在      更新时间:2023-09-26

我正在编写一个函数,它需要两个列表,第二个列表与第一个列表相同,只是它被洗牌并删除了一个元素。函数应该返回缺失的元素。我写了这个函数

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];
}