递归函数返回未定义的,即使在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));