我有一个函数应该递归扫描一个数组并确定它是否包含给定值。
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,我想了解为什么会发生这种情况。
答案 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);
}
}