zoukankan      html  css  js  c++  java
  • JS高级——递归

    基本概念

    1、在函数内调用函数自己,就是递归

    2、没有递归结束条件的递归,就是死递归

    3、化归思想,将一个问题由难化易,由繁化简,由复杂化简单的过程称为化归,它是转化和归结的简称。

    基本使用

    1、计算1到100的和,基本规律如下

    //1-100之间的和
    //1-1   1
    //1-2   1 + 2
    //1-3   1 + 2 + 3
    //1-4   1 + 2 + 3 + 4
    //1-n   1到(n-1)的和 + n

    类似于:sum(n)=sum(n-1)+sum(n)

    <script>
        function sum(n) {
            if (n == 1) {
                return 1;
            }
            return sum(n - 1) + n;
        }
    
        var num = sum(100);
        console.log(num);//5050
    </script>

    2、阶乘

    //阶乘
    //n!
    //1*2*3...*n
    
    //1   1
    //2   1! * 2
    //3   2! * 3
    //4   3! * 4
    //n   (n-1)!*n
    <script>
        function factorial(n) {
            if (n == 1) {
                return 1;
            }
            return factorial(n - 1) * n;
        }
    
        console.log(factorial(5))
    </script>

    3、斐波那契

    //斐波那契数列
    //1 1 2 3 5 8 13 21
    //1 1
    //2 1
    //3 第1项 + 第2项
    //4 第2项 + 第3项
    //5 第3项 + 第4项
    <script>
        function fibonacci(n) {
            if (n <= 2) {
                return 1;
            }
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    
        console.log(fibonacci(10));
    </script>

    4、遍历所有后代

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script>
            window.onload = function () {
                //给页面中所有的元素添加一个边框  1px solid pink
                //DOM中,没有提供直接获取后代元素的API
                //但是可以通过childNodes来获取所有的子节点
    
                //先找body的所有子元素
                //再找body的子元素的所有子元素
                var allChildren = [];
                function getChildNode(node){
                    //先找子元素
                    var nodeList = node.childNodes;
                    //在用子元素再找子元素  这里就可以递归了
                    //for循环中的条件,就充当了结束的条件
                    for (var i = 0; i < nodeList.length; i++) {
                        //childNode获取到到的节点包含了各种类型的节点
                        //但是我们只需要元素节点  通过nodeType去判断当前的这个节点是不是元素节点
                        var childNode = nodeList[i];
                        //判断是否是元素节点
                        if(childNode.nodeType == 1){
                            childNode.style.border = "1px solid pink";
                            getChildNode(childNode);
                        }
                    }
                }
                getChildNode(document.body);
            }
        </script>
    </head>
    <body>
    <div>1div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>2div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>3div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>4div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>5div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>6div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>7div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>8div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>9div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>10div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <p>我是第1个p标签</p>
    <p>我是第2个p标签</p>
    <p>我是第3个p标签</p>
    <p>我是第4个p标签</p>
    <p>我是第5个p标签</p>
    <p>我是第6个p标签</p>
    <p>我是第7个p标签</p>
    <p>我是第8个p标签</p>
    <p>我是第9个p标签</p>
    <p>我是第10个p标签</p>
    </body>
    </html>

     第二种写法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script>
            //给body下所有的后代元素添加border  1px solid pink
            //DOM 没有提供直接获取所有后代元素的API
            //jQuery提供了find
            //DOM 提供了获取自带元素的属性
            //  childNodes   children
    
            //获取一个节点的所有后代节点
            //可以先获取他所有的子节点
            //再一次获取所有子节点的子节点
            //以此类推,就获取到了所有的后代节点
    
    
            function getChildNodes(node){
                var nodes = node.childNodes;
                var arr = [];
    
                for (var i = 0; i < nodes.length; i++) {
                    var childNode = nodes[i];
                    if(childNode.nodeType == 1){
                        //可以在这里使用这个元素节点了
                        arr.push(childNode);
                        //第一次进来的时候childNOde就是第一个div
                        var temp = getChildNodes(childNode);
                        arr = arr.concat(temp);
                    }
                }
                return arr;
            }
    
    
    
    
            window.onload =function () {
    //            var arr1 = getChildNodes(document.getElementsByTagName("div")[0]);
    
    
                var arr = getChildNodes(document.body);
    
                for (var i = 0; i < arr.length; i++) {
                    var ele = arr[i];
                    ele.style.border = "1px solid pink";
                }
            }
        </script>
    
    </head>
    <body>
    <div>1div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>2div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>3div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>4div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>5div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>6div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>7div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>8div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>9div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <div>10div
        <p>1p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>2p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>3p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>4p<span>1span</span><span>2span</span><span>3span</span></p>
        <p>5p<span>1span</span><span>2span</span><span>3span</span></p>
    </div>
    <p>我是第1个p标签</p>
    <p>我是第2个p标签</p>
    <p>我是第3个p标签</p>
    <p>我是第4个p标签</p>
    <p>我是第5个p标签</p>
    <p>我是第6个p标签</p>
    <p>我是第7个p标签</p>
    <p>我是第8个p标签</p>
    <p>我是第9个p标签</p>
    <p>我是第10个p标签</p>
    </body>
    </html>
  • 相关阅读:
    51nod 1185 威佐夫游戏 V2
    51nod 1212 无向图最小生成树
    51nod 1242 斐波那契数列的第N项
    51nod 1240 莫比乌斯函数
    51nod 1256 乘法逆元
    51nod 1264 线段相交
    51nod 1265 四点共面
    51nod 1298 圆与三角形
    51nod 2006 飞行员配对
    CGLIB介绍与原理
  • 原文地址:https://www.cnblogs.com/wuqiuxue/p/8340986.html
Copyright © 2011-2022 走看看