递归

在计算机科学中, 递归 这个术语表示一种调用自身的方法。最常使用的两种递归类型是:

  • 头递归(head recursion)是在接近方法开始处发起的递归调用。它以来于调用堆栈上执行的上一次操作的结果,所以如果堆栈不够大,则有可能发生堆栈溢出。
  • 尾递归(tail recursion)是在结尾处执行的递归调用,是要处理的最后一行代码。


举个例子:**使用两种递归类型实现 10!的阶乘。

  1. 头递归
  1. function getFactorial(num) {
  2. if (num == 1) return 1;
  3. return num * getFactorial(num - 1);
  4. }
  5. getFactorial(10); // Output: 3628800
  1. 尾递归
  1. function getFactorial(num, total) {
  2. if (num == 0) return total;
  3. return getFactorial(num - 1, total *= num );
  4. }
  5. getFactorial(10); // Output: 3628800

循环

循环是对一些语句的重复执行。在 Javascript 语言中,有 for、do 和 while 循环。循环不会增大调用堆栈,无论循环执行了多少次。
循环与递归函数之间一个重要的区别是,循环使用迭代器来遍历循环,而递归函数必须对比结果才知道何时推出。