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