递归
在计算机科学中, 递归 这个术语表示一种调用自身的方法。最常使用的两种递归类型是:
- 头递归(head recursion)是在接近方法开始处发起的递归调用。它以来于调用堆栈上执行的上一次操作的结果,所以如果堆栈不够大,则有可能发生堆栈溢出。
- 尾递归(tail recursion)是在结尾处执行的递归调用,是要处理的最后一行代码。
举个例子:**使用两种递归类型实现 10!的阶乘。
- 头递归
function getFactorial(num) {
if (num == 1) return 1;
return num * getFactorial(num - 1);
}
getFactorial(10); // Output: 3628800
- 尾递归
function getFactorial(num, total) {
if (num == 0) return total;
return getFactorial(num - 1, total *= num );
}
getFactorial(10); // Output: 3628800
循环
循环是对一些语句的重复执行。在 Javascript 语言中,有 for、do 和 while 循环。循环不会增大调用堆栈,无论循环执行了多少次。
循环与递归函数之间一个重要的区别是,循环使用迭代器来遍历循环,而递归函数必须对比结果才知道何时推出。