03月08, 2019

JS基础(5)——函数(5)——递归函数

递归函数是一个一直直接或者间接调用它自己本身,直到满足某个条件才会退出的函数。当需要设计到迭代过程时,这是一个很有用的工具。下面我们利用阶乘的计算来演示一个递归函数。

所谓阶乘,可以参见下面的官方解释:

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且 0 的阶乘为 1。自然数 n 的阶乘写作 n!。

举个例子,计算 4 的阶乘,写作 4!,其值等于 4 3 2 * 1 = 24

那么,这里我们可以认为 4! = 4 3!,而 3! 又等价于 3 2!,2! = 2 * 1!,最终 1! 等于 1 本身。假设有一个函数 numCalc,该函数就是专门用于计算一个数的阶乘的,那么我们可以得到下面的算式:

numCalc(4) = 4 * numCalc(3)
numCalc(3) = 3 * numCalc(2)
numCalc(2) = 2 * numCalc(1)
numCalc(1) = 1

可以看到,这里我们只需要不停的委托 numCalc 函数来帮助我们计算一个数的阶乘即可。最终,阶乘的递归函数如下:

const numCalc = function (i) {
    if (i === 1) {
        return 1;
    } else {
        return i * numCalc(i - 1);
    }
}
console.log(numCalc(4)); // 24

总结

  1. 函数最大的好处就是实现了对代码的复用。

  2. 在 JavaScript 中声明一个函数的方式有多种,例如字面量,函数表达式以及构造器等方式都可以声明一个函数。

  3. 函数最基本的就是要掌握函数三要素,即函数功能,函数参数以及函数返回值。

  4. 在 JavaScript 的函数里面存在一个叫做 arguments 的伪数组对象,里面存储了调用函数时传递的所有实际参数。

  5. 从 ECMAScript 6 开始新增加了不定参数和默认参数。

  6. JavaScript 里面的函数也像对象一样,具有属性和方法。

  7. JavaScript 里面作用域一共有 3 种:全局作用域,函数作用域以及eval()作用域。

  8. 变量提升,就是指在使用var关键字进行变量声明的时候,默认会将声明变量的部分提升至当前作用域的最顶上。

  9. 函数提升,是指当我们使用字面量方式声明一个函数的时候,此函数的声明会提升到当前作用域的最顶端。

  10. ECMAScript 6 新增加了一种声明函数的方式,叫做箭头函数。其最大的特点在于不需要function关键字,更加的简洁。

  11. 回掉函数是指将一个函数作为参数传递给另外一个函数,然后在另外一个函数里面执行传递过去的函数。

  12. 递归函数是一个一直直接或者间接调用它自己本身,直到满足某个条件才会退出的函数。

本文链接:http://www.yanhongzhi.com/post/js-basis-16.html

-- EOF --

Comments