【JavaScript】28_递归

17、递归

递归

  • 调用自身的函数称为递归函数

  • 递归的作用和循环是基本一直

递归的核心思想就是将一个大的问题拆分为一个一个小的问题,小的问题解决了,大的问题也就解决了

编写递归函数,

一定要包含两个要件:

1.基线条件 —— 递归的终止条件

2.递归条件 —— 如何对问题进行拆分

递归的作用和循环是一致的,不同点在于,递归思路的比较清晰简洁,循环的执行性能比较好

在开发中,一般的问题都可以通过循环解决,也是尽量去使用循环,少用递归

只在一些使用循环解决比较麻烦的场景下,才使用递归

    <script>
        // 创建一个函数,可以用来求任意数的阶乘
        /* 
            1! 1
            2! 1 x 2 = 2
            3! 1 x 2 x 3 = 6
            ...
            10! 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 = xxx

            如果用递归来解决阶乘的问题?
                5! = 4! x 5
                4! = 3! x 4
                3! = 2! x 3
                2! = 1! x 2
                1! = 1
        */

        function jieCheng(num){
            // 创建一个变量用了记录结果
            let result = 1

            for(let i=2; i<=num; i++){
                result *= i
            }

            return result
        }

        let result = jieCheng(3)

        // console.log(result)

        function jieCheng2(num){
            // 基线条件
            if(num === 1){
                return 1
            }
            // 递归条件
            // num! = (num-1)! * num
            return jieCheng2(num-1) * num
        }

        result = jieCheng2(5)
        /* 
            jieCheng2(5)
                - return jieCheng2(4) * 5
                 - return jieCheng2(3) * 4
                  - return jieCheng2(2) * 3
                    - return jieCheng2(1) * 2
                     - return 1
        */
        console.log(result)
    </script>

练习:

        <script>
            /* 
                一对兔子出生后的两个月后每个月都能生一对小兔子
                    - 编写一个函数,可以用来计算第n个月的兔子的数量

                1   2   3   4   5   6   7   8   9   10  11  12
                1   1   2   3   5   8   13  21  34 ....
                - 规律,当前数等于前两个数之和(斐波那契数列)
            */

            // 求斐波那契数列中的第n个数
            function fib(n) {
                // 确定基线条件
                if (n < 3) {
                    return 1
                }

                // 设置递归条件
                // 第n个数 = 第n-1个数 + 第n-2个数
                return fib(n - 1) + fib(n - 2)
            }

            let result = fib(10)
            console.log(result)
        </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名之以父

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值