【JavaScript】41_递归

简介: # 17、递归递归- 调用自身的函数称为递归函数- 递归的作用和循环是基本一直递归的核心思想就是将一个大的问题拆分为一个一个小的问题,小的问题解决了,大的问题也就解决了编写递归函数,## 一定要包含两个要件:1.基线条件 —— 递归的终止条件2.递归条件 —— 如何对问题进行拆分递归的作用和循环是一致的,不同点在于,递归思路的比较清晰简洁,循环的执行性能比较好在开发中,一般的问题都可以通过循环解决,也是尽量去使用循环,少用递归只在一些使用循环解决比较麻烦的场景下,才使用递归```html <script> /

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>
相关文章
|
3月前
|
JSON JavaScript 前端开发
js树形菜单 如何用递归制作一个简单的树形菜单
js树形菜单 如何用递归制作一个简单的树形菜单
40 0
|
4月前
|
JSON JavaScript 数据格式
js递归树形菜单
js递归树形菜单
|
7月前
|
JSON JavaScript 数据格式
js递归树形菜单
js递归树形菜单
|
9天前
|
JavaScript
node.js递归拼凑成树形结构
node.js递归拼凑成树形结构
10 0
|
1月前
|
JavaScript 前端开发
JavaScript递归的理解(最详细)
JavaScript递归的理解(最详细)
|
3月前
|
Rust 前端开发 JavaScript
【面试题】JavaScript中递归的理解
【面试题】JavaScript中递归的理解
|
4月前
|
JavaScript 前端开发 数据处理
【JavaScript 数据处理-番外篇】手写了几个数据处理,都是用的递归
【JavaScript 数据处理-番外篇】手写了几个数据处理,都是用的递归
|
4月前
|
JavaScript 前端开发
【JavaScript 递归】判断两个对象的键值是否完全一致,支持深层次查询,教你玩转JavaScript脚本语言
【JavaScript 递归】判断两个对象的键值是否完全一致,支持深层次查询,教你玩转JavaScript脚本语言
|
4月前
|
JSON JavaScript 数据格式
JS递归树形菜单
JS递归树形菜单
17 1
|
5月前
|
JavaScript 前端开发
JavaScript递归:原理与实例
JavaScript递归:原理与实例
45 0