递归函数
递归函数只是一个函数,它会调用自身。
function factorial (n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
上面的函数显示了如何执行递归函数以返回阶乘的基本示例。
另一个例子是检索数组中偶数的总和。
function countEvenNumbers (arr) {
// Sentinel value. Recursion stops on empty array.
if (arr.length < 1) {
return 0;
}
// The shift() method removes the first element from an array
// and returns that element. This method changes the length of the array.
var value = arr.shift();
// `value % 2 === 0` tests if the number is even or odd
// If it's even we add one to the result of counting the remainder of
// the array. If it's odd, we add zero to it.
return ((value % 2 === 0) ? 1 : 0) + countEvens(arr);
}
重要的是,这些函数会进行某种类型的标记值检查以避免无限循环。在上面的第一个例子中,当 n
小于或等于 1 时,递归停止,允许每个调用的结果返回到调用堆栈。