递归的小理解

107 阅读1分钟

1.递归求阶乘

     //求阶乘
      function factorial(n) {
            if (n == 1) {
                return 1;
            }
            return n * factorial(n - 1);
        }
        factorial(4);

第一次调用:n=3,进入函数factorial,先进行判断,此时 4 != 1,则返回 4 * factorial(3) 第二次调用:n=3,进入函数factorial,先进行判断,此时 3 != 1,则返回 3 * factorial(2) 第三次调用:n=2,进入函数factorial,先进行判断,此时 2 != 1,则返回 2 * factorial(1) 第四次调用:n=1,进入函数factorial,先进行判断,此时 1 == 1,则返回 1 合起来则为 :

4 * factorial(3)
4 * (3 * factorial(2))
4 * (3 * (2 * factorial(1)))
4 * (3 * (2 * 1))
4 * (3 * (2))
4 * (6)
24

故得出结果为24

2.阶乘求和

        //求阶乘和
        function factorialSum(n) {
            var sum = 0;
            for (var i = 1; i <= n; i++) {
                sum += factorial(i);
            }
            return sum;
        }
        factorialSum(4);

过程为:

sum = 0 + factorial(1)
sum = 0 + factorial(1) + factorial(2)
sum = 0 + factorial(1) + factorial(2) + factorial(3)
sum = 0 + factorial(1) + factorial(2) + factorial(3) + factorial(4)

故阶乘和为: 0 + 1 + 2 + 6 + 24 = 33

利用递归函数求斐波那契数列(兔子序列): 1123581321...
        function FibonacciSequence(n) {
            if (n == 1 || n == 2) {
                return 1;
            } else {
                return FibonacciSequence(n - 1) + FibonacciSequence(n - 2);
            }
        }