Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归函数返回未定义的,即使在javascript中有一个有效的return语句_Javascript - Fatal编程技术网

递归函数返回未定义的,即使在javascript中有一个有效的return语句

递归函数返回未定义的,即使在javascript中有一个有效的return语句,javascript,Javascript,这是一个需要返回一个数字的问题,该数字在数组中只出现一次,而其余元素出现两次。使用二进制搜索,我做了我能做的,但是我被困在第一个测试用例中。我不明白为什么它返回未定义,当我可以记录相同的。帮我了解发生了什么事 function singleNonDuplicate(nums) { if(nums.length == 1) { console.log(nums[0]); return nums[0]; } if((nums[Math.floor(nums.len

这是一个需要返回一个数字的问题,该数字在数组中只出现一次,而其余元素出现两次。使用二进制搜索,我做了我能做的,但是我被困在第一个测试用例中。我不明白为什么它返回未定义,当我可以记录相同的。帮我了解发生了什么事

function singleNonDuplicate(nums) {
  if(nums.length == 1) {
     console.log(nums[0]);
     return nums[0];
  } 

  if((nums[Math.floor(nums.length/2)] !== nums[Math.floor(nums.length/2) - 1]) && (nums[Math.floor(nums.length/2)] !==                                    nums[Math.floor(nums.length/2) + 1])) {
      return nums[Math.floor(nums.length/2)];
  } 


  if(Math.floor(nums.length/2) % 2  == 0) {
      if(nums[Math.floor(nums.length/2)] == nums[Math.floor(nums.length/2) - 1]) {
          singleNonDuplicate(nums.slice(0, Math.floor(nums.length/2) - 1));
                      console.log('g');
      } else {
          singleNonDuplicate(nums.slice(Math.floor(nums.length/2) + 2));
                      console.log('g');

      }
  } else {
       if(nums[Math.floor(nums.length/2)] == nums[Math.floor(nums.length/2) - 1]) {
           console.log(nums.slice(Math.floor(nums.length/2) + 1));
          singleNonDuplicate(nums.slice(Math.floor(nums.length/2) + 1));
      } else {
          console.log('g');
          singleNonDuplicate(nums.slice(0, Math.floor(nums.length/2)));
      }
  }
}

console.log(singleNonDuplicate([1,1,2]));

这可能有点离题,但有一种更好的方法可以使用XOR解决此类问题:

function appearsOnlyOnce(array) {
    var single = array[0];
    for (var i=1; i<array.length; i++) {
        single ^= array[i];
    }
    return single
}
函数外观(数组){
var single=数组[0];

对于(var i=1;i这可能有点离题,但有一种更好的方法可以使用XOR解决此类问题:

function appearsOnlyOnce(array) {
    var single = array[0];
    for (var i=1; i<array.length; i++) {
        single ^= array[i];
    }
    return single
}
函数外观(数组){
var single=数组[0];
对于(var i=1;i当从函数中调用singleNonDuplicate时,必须返回结果

单一非重复函数(nums){
如果(nums.length==1){
console.log(nums[0]);
返回nums[0];
} 
如果((nums[Math.floor(nums.length/2)]!==nums[Math.floor(nums.length/2)-1])&(nums[Math.floor(nums.length/2)]!==nums[Math.floor(nums.length/2)+1])){
返回nums[数学楼层(nums.长度/2)];
} 
如果(数学楼层(nums.length/2)%2==0){
如果(nums[数学地板(nums.length/2)]==nums[数学地板(nums.length/2)-1]){
返回单非重复(nums.slice(0,数学层(nums.length/2)-1);
console.log('g');
}否则{
返回单个非重复(nums.slice(数学层(nums.length/2)+2));
console.log('g');
}
}否则{
如果(nums[数学地板(nums.length/2)]==nums[数学地板(nums.length/2)-1]){
console.log(nums.slice(数学层(nums.length/2)+1));
返回单非重复(nums.slice(数学层(nums.length/2)+1));
}否则{
console.log('g');
返回SingleNonduplate(nums.slice(0,数学层(nums.length/2));
}
}
}
log(singleNonDuplicate([1,1,2]);
从函数中调用singleNonDuplicate时,必须返回结果

单一非重复函数(nums){
如果(nums.length==1){
console.log(nums[0]);
返回nums[0];
} 
如果((nums[Math.floor(nums.length/2)]!==nums[Math.floor(nums.length/2)-1])&(nums[Math.floor(nums.length/2)]!==nums[Math.floor(nums.length/2)+1])){
返回nums[数学楼层(nums.长度/2)];
} 
如果(数学楼层(nums.length/2)%2==0){
如果(nums[数学地板(nums.length/2)]==nums[数学地板(nums.length/2)-1]){
返回单非重复(nums.slice(0,数学层(nums.length/2)-1);
console.log('g');
}否则{
返回单个非重复(nums.slice(数学层(nums.length/2)+2));
console.log('g');
}
}否则{
如果(nums[数学地板(nums.length/2)]==nums[数学地板(nums.length/2)-1]){
console.log(nums.slice(数学层(nums.length/2)+1));
返回单非重复(nums.slice(数学层(nums.length/2)+1));
}否则{
console.log('g');
返回SingleNonduplate(nums.slice(0,数学层(nums.length/2));
}
}
}

console.log(singleNonDuplicate([1,1,2]);
您不会从所有递归点返回。
返回singleNonDuplicate(…)
尝试在递归调用中返回,即singleNonDuplicate(nums.slice(Math.floor(nums.length/2)+2));变成return singleNonDuplicate(nums.slice(Math.floor(nums.length/2)+2));您不会从所有递归点返回。
returnsinglenonduplicate(..)
尝试在递归调用中返回,即singleNonDuplicate(nums.slice(Math.floor(nums.length/2)+2));变成returnsinglenonduplicate(nums.slice(Math.floor(nums.length/2)+2));