JavaScript 中允许函数递归调用。前面定义过的 factorial() 函数也可以用递归方式定义:
function factorial(number) {
if (number == 1) {
return number;
}else {
return number * factorial(number-1);
}
}
print(factorial(5));
当一个函数被递归调用,在递归没有完成时,函数的计算结果暂时被挂起。为了说明这个过程,这里用一列表展示了以 5 作为参数,调用 factorial() 函数时函数的执行过程:
5 * factorial(4)
5 * 4 * factorial(3)
5 * 4 * 3 * factorial(2)
5 * 4 * 3 * 2 * factorial(1)
5 * 4 * 3 * 2 * 1
5 * 4 * 3 * 2
5 * 4 * 6
5 * 24
120
对于大多数情况,JavaScript 都有能力处理递归层次较深的递归调用(上面的例子递归层次较浅);但是保不齐有的算法需要的递归深度超出了 JavaScript 的处理能力,这时我们就需要寻求该算法的一种迭代式解决方案了。任何可以被递归定义的函数,都可以被改写为迭代式的程序,要将这点牢记于心。