谁能告诉我为什么这个递归函数返回undefined而不是false或true?

时间:2018-02-21 20:41:33

标签: 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);
 }
} 

我在调试器中检查了它,我知道如果我给它输入应该导致一个假值,比如includesNumber([4,8,15,16,23,42],5),它会去通过所有适当的步骤,并击中第一个if条件。如果我然后键入" arr.length === 1"它返回true,如果我输入" arr [0]!== num"它也返回true,因此它应该满足返回false的所有条件。但相反,它返回undefined。我似乎总是遇到这个问题,递归,它满足适当的条件,但返回undefined,我想了解为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

你需要对函数进行返回 - 请参阅此小提琴https://jsfiddle.net/2svta4ge/

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