Javascript 有人能告诉我为什么这个递归函数返回undefined而不是false或true吗?
我有一个函数,它应该递归扫描数组并确定它是否包含给定的值Javascript 有人能告诉我为什么这个递归函数返回undefined而不是false或true吗?,javascript,recursion,Javascript,Recursion,我有一个函数,它应该递归扫描数组并确定它是否包含给定的值 function includesNumber(arr, num) { if (arr.length === 1 && arr[0] !== num) { return false; } else if (arr[0] === num) { return true; } else { arr = arr.slice(1); includesNumber(arr, num); }
function includesNumber(arr, num) {
if (arr.length === 1 && arr[0] !== num) {
return false;
} else if (arr[0] === num) {
return true;
} else {
arr = arr.slice(1);
includesNumber(arr, num);
}
}
我已经在一个调试器中检查过它,我知道如果我给它一个应该导致错误值的输入,比如includeNumber([4,8,15,16,23,42],5),它会经过所有正确的步骤并达到第一个if条件。如果输入“arr.length==1”,则返回true;如果输入“arr[0]!==num”,则返回true,因此应满足返回false的所有条件。但是,它返回未定义的。我似乎总是在递归中遇到这个问题,它满足适当的条件,但返回的是未定义的,我想了解为什么会发生这种情况。您需要在函数上添加一个返回值-请参阅此提琴:
递归调用的结果不会返回:对于大多数数组,结果实际上是
未定义的
(在所有情况下,当它递归调用自身时)。另外,使用arr.slice(..)
会导致此任务的复杂度不高。返回includeNumber(arr,num)代码>因为您不从递归返回。。。。
function includesNumber(arr, num) {
if (arr.length === 1 && arr[0] !== num) {
return false;
} else if (arr[0] === num) {
return true;
} else {
arr = arr.slice(1);
return includesNumber(arr, num);
}
}