中允许函数递归调用。前面定义过的 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

对于大多数情况, 都有能力处理递归层次较深的递归调用(上面的例子递归层次较浅);但是保不齐有的算法需要的递归深度超出了 的处理能力,这时我们就需要寻求该算法的一种迭代式解决方案了。任何可以被递归定义的函数,都可以被改写为迭代式的程序,要将这点牢记于心。

收藏 打印