精华内容
下载资源
问答
  • Js 终止递归

    2021-02-24 13:39:38
    js 编写递归方法,当查找到指定节点后: 1. 递归并不会停止,直到所有节点遍历结束之后,才会停止,会有性能损耗。 2. 递归成功后,如何返回查找到的值? 代码如下:

    js 编写递归方法,当查找到指定节点后:

    1. 递归并不会停止,直到所有节点遍历结束之后,才会停止,会有性能损耗。

    2. 递归成功后,如何返回查找到的值?

    代码如下:

    /**

     * @description: 树节点查到指定id

     * @param {Number} findId 要查找的id

     * @param {Array} array 遍历的数组

     * @param {String} findKey 要对比的key

     * @returns: 

     */

    var findTreeId = (findId, array, findKey='id') => {

        for (let index = 0; index < array.length; index++) {

            const element = array[index];

            if (element[findKey] == findId) {

                return element;

            } else if (element.children.length) {

                let result = findTreeId(findId, element.children, findKey='id')

                // 这个判断很重要,在没有返回值的情况下才进行递归

                if (result) {

                    return result;

                }

            }

        }

        return null;

    };

    数据如下:

    var treedata = [
                {
                    id: 1,
                    name: 123,
                    pid: 0,
                    children: [
                        {
                            id: 2,
                            name: 223,
                            pid: 1,
                            children: [
                                { id: 31, name: 311, pid: 2, children: [] },
                                { id: 32, name: 322, pid: 2, children: [] }
                            ]
                        },
                        {
                            id: 3,
                            name: 22222,
                            pid: 1,
                            children: [{ id: 41, name: 223232, pid: 3, children: [] }]
                        }
                    ]
                },
                {
                    id: 5,
                    name: 55,
                    pid: 0,
                    children: [
                        {
                            id: 51,
                            name: 5111,
                            pid: 5,
                            children: [
                                { id: 511, name: 123, pid: 51, children: [] },
                                { id: 512, name: 31222, pid: 51, children: [] }
                            ]
                        }
                    ]
                }
            ];

    运行:console.log('findTreeId',findTreeId(511,treedata));

    结果即返回查找的节点,并且查到后,不再继续遍历

    展开全文
  • js递归

    2020-09-20 20:36:25
    递归函数的使用要注意函数终止条件避免死循环 递归实现形式 声明一个具名函数,通过函数名调用 使用arguments.callee代替函数名(严格模式下不支持使用arguments.callee) 使用函数表达式 递归返回值 递归函数...

    定义

    递归函数就是在函数体内调用本函数
    递归函数的使用要注意函数终止条件避免死循环

    递归实现形式

    1. 声明一个具名函数,通过函数名调用
    2. 使用arguments.callee代替函数名(严格模式下不支持使用arguments.callee)
    3. 使用函数表达式

    递归返回值

    1. 递归函数相当于一种循环调用,需要避免死循环,给定一个条件停止调用
    2. 递归函数的返回值要返回整个函数
    展开全文
  • js 递归

    2019-09-02 12:01:02
    需要注意的是,在使用递归的使用一定要加上循环终止条件,不然容易造成死循环。 递归可以实现阶乘,例如实现5的阶乘。 function a(n){ if(n == 1){ return 0; } return n * a(n-1); } console.log(a(5));//...

    递归就是自己调用自己。

    需要注意的是,在使用递归的使用一定要加上循环终止条件,不然容易造成死循环。

    递归可以实现阶乘,例如实现5的阶乘。

    function a(n){
        if(n == 1){
            return 0;
        }
        return n * a(n-1);
    }
    console.log(a(5));//输出结果为120 

    递归也可以循环数组,我们先看一下for循环数组:

    function forTest(){ 
        for(let i in arrList){
            console.log(arrList[i]);
        }		   
    }
    forTest();

    递归循环数组内容:

    function recursive() {
        const testFun = function (i) {
            console.log(arrList[i])
            if(i == arrList.length - 1){//这里是循环终止条件
                return;
            }
            i++;
            testFun(i)//在函数内部自己调用自己
        }
        testFun(0)
    }
    recursive()

    从数据data中提取数据,下面是一个数组,现在我们需要取出 背心 短裤 连衣裙 休闲裤 拉面丸子 咪咪虾条 绿豆糕 手撕面包

    var data = [{
        name: "全部分类",
        children:[
            {
                name:"衣服",
                children:[
                    {name:"男装",children:[{name:"背心"},{name:"短裤"}]},
                    {name:"女装",children:[{name:"连衣裙"},{name:"休闲裤"}]}
                ]
            },
            {
                name:"食品",
                children:[
                    {name:"网红零食",children:[{name:"拉面丸子"},{name:"咪咪虾条"}]},
                    {name:"糕点",children:[{name:"绿豆糕"},{name:"手撕面包"}]}
                ]
            }
        ]
    }] 
    //可以用遍历的方法去实现,遍历一层一层有一层,终于可以实现我们的需求了。
    var bldata = function () {
        var str = ""
        data.forEach(function(row){
            row.children.forEach(function(row){
                row.children.forEach(function(row){
                    row.children.forEach(function(row){
                        str += (row.name +",")
                    })
                })
            })
        })
        console.log(str)
    }
    bldata();
    //下面使用递归来实现我们的需求
    var dgdata = function(){
        var str = '';
        var dg = function(list){
            list.forEach(function(row){
                if(row.children){
                    dg(row.children);
                }else{
                    str += row.name+","
                }
            })
        }
        dg(data);
        console.log(str);
    }
    dgdata()

     

    展开全文
  • Javascript 递归运算

    千次阅读 2019-06-04 10:45:06
    <script> //【示例1】数学上常用的阶乘函数、幂函数和斐波那契数列。以阶乘函数为例,对于这种递归定义的函数,可以使用递归过程来求解: var f = function (x) { ... // 递归终止条件 el...
    <script>
    
            //【示例1】数学上常用的阶乘函数、幂函数和斐波那契数列。以阶乘函数为例,对于这种递归定义的函数,可以使用递归过程来求解:
            var f = function (x) {
                if (x < 2)
                    return 1;								// 递归终止条件
                else
                    return x * arguments.callee(x - 1); 	// 递归调用过程
            }
            alert(f(6));		// 返回6的阶乘值为720
    
            //【示例2】文档树就是一种递归的数据结构,下面使用递归运算来计算指定节点内所包含的全部节点数。
    
            function f(n) { 				// 统计指定节点及其所有子节点的个数
                var l = 0; 				// 初始化计数变量
                if (n.nodeType == 1) 		// 如果是元素节点,则计数
                    l++; 	// 递加计数器
                var child = n.childNodes; 	// 获取子节点集合
                for (var i = 0; i < child.length; i++) { 	// 遍历所有子节点
                    l += f(child[i]); 		// 递归运算,统计当前节点下所有子节点数
                }
                return l; 					// 返回节点数
            }
            window.onload = function () {	// 绑定页面初始化事件处理函数
                var body = document.getElementsByTagName("body")[0];
                // 获取当前文档中body节点句柄
                alert(f(body)) 			// 返回2,即body和script两个节点
            }
    
    
            function f(n, a, b, c) {
                if (n == 1) 				// 特殊处理
                    document.write(a + " &rarr; " + c + "<br />");
                    // 输出显示,直接让参数a移给c
                else {
                    f(n - 1, a, c, b); 	// 递归调用函数,调整参数顺序,让参数a移给b
                    document.write(a + " &rarr; " + c + "<br />");
                    // 输出显示
                    f(n - 1, b, a, c);
                    // 如果当n等于1时,调整参数顺序,让参数b移给c
                }
            }
            f(3, "A", "B", "C"); 		// 调用函数
    
    
        </script>
    
    展开全文
  • js递归函数递归思想

    2021-01-20 12:27:15
    2、递归函数的使用要注意函数终止条件避免死循环,使用递 归的时候必须有一个结束标志,否则会报内存溢出的错误 Maximum call stack size exceeded; 为什么使用递归递归是编程算法的一种,通过调用自身,将一些...
  • JavaScript递归

    2019-04-03 09:41:54
    递归对于解决一些算法问题有很大的优势,但是递归必须慎重使用,递归函数如果判断条件无法终止,很容易造成内存溢出,报错stack overflow,使程序崩溃。 递归最经典例子,阶乘: 阶乘就是12345… 计算阶乘的函数...
  • 一、递归: 函数中调用函数自己,在使用递归的时候一定需要有结束递归的条件,否则就会变成死循环。...简单来说,循环是有去无回,而递归则是有去有回(因为存在终止条件)。 举个栗子,你用你手中的钥匙...
  • JS 递归函数

    2020-11-30 17:22:42
    递归函数:是指函数直接或间接调用自身函数本身,...使用递归函数必须要符合两个条件: 1、 自己调用自己 2、必须有一个终止处理或计算的出口,让函数结束调用函数自身。 用递归输出对象里包含的全部属性值: var obj
  • 一般来说,递归函数是需要有边界条件的,如果没有边界条件,那么函数就会无限制的调用本身,从而出现函数死循环,就比如下面这个例子。 function fn(){ //定义函数fn console.log(1); //在控制
  • javascript递归详解

    2020-07-01 19:24:19
    javascript递归详解 计算机科学的新学生通常难以理解递归程序设计的概念。递归思想之所以困难,原因在于它非常像是循环推理(circular reasoning)。它也不是一个直观的过程;当我们指挥别人做事的时候,我们极少会...
  • JavaScript 递归

    2019-10-06 18:27:37
    两者都重复执行相同的代码,并且两者都需要一个终止条件(避免无限循环或者无限递归)。例如以下的循环: var x = 0 ; while (x ) { // "x 是循环条件 // do stuff x++ ; } 可以被转化成一个递归...
  • 了解JavaScript递归

    2020-06-18 17:14:10
    使用递归可以更自然地解决一些问题。 例如,像Fibonacci序列这样的序列具有递归定义。 序列中的每个数字都是序列中前两个数字的和。 要求您建立或遍历树状数据结构的问题也可以通过递归解决。 训练自己进行递归思考...
  • javascript 递归调用

    2020-03-01 20:35:26
    递归调用简介:        递归调用是一种特殊的嵌套调用,是某个函数调用自己或者是调用其他函数后再次调用自己的,只要函数之间互相调用能产生循环的则一定是递归调用,递归调用...
  • 一、递归的简介 使用递归可以更自然地解决一些问题。...每个递归函数都需要一个终止条件,从而使其不会无休止地循环下去。然而,仅仅加一个终止条件,是不足以避免其无限循环的。该函数必须一步一步地接近终止条件。...
  • js递归函数

    2020-05-11 11:12:44
    使用递归函数必须要符合两个条件: 1、 在每一次调用自己时,必须是(在某种意义上)更接近于解; 这句话怎么理解? 大家家里都有楼梯吧?比如从一楼走到二楼,那么我们的起点是一楼,目的地是二楼,当你往上每走...
  • JavaScript递归函数

    千次阅读 2018-07-17 21:33:21
    1.结束条件 2.递推关系 递归函数特点: 1. 每一级函数调用时都有自己的变量,但是函数代码并不会得到复制; 2. 每次调用都会有一次返回; 3. 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行...
  • javascript实现递归

    2021-01-08 23:35:04
    递归是一个函数实现自己调用自己的过程,在递归过程中需要存在函数的调用,以及实现条件终止。 下面几个例子. <script> let num = 1; function fn(){ console.log("我要打印六句话"); if(num == 6){ ...
  • js递归与应用

    2021-06-21 08:15:03
    javascript 先说一下概念,递归就是直接或间接的调用自己,递归就是将没解决的问题转化为已解决的问题。 所以重点是转化过程,即递归(划归)过程., 然后就是在某个条件下已解决的内容 ...
  • js递归实现方式

    2019-09-27 15:00:46
    递归函数的使用要注意函数终止条件避免死循环; 递归实现形式: 1.声明一个具名函数,通过函数名调用 function f(a){ if(a<=1){ return 1 }else{ return a*f(a-1) } } 但是这样使用会因为 .....
  • javascript递归函数

    2018-04-06 21:41:00
    递归函数:是指函数直接或间接调用函数本身,则称该函数为递归函数。 这句话理解起来并不难,从概念上出发,给出以下的例子: function foo(){ console.log("函数 foo 是递归函数。"); foo(); } 这个...
  • 明确递归终止条件。 给出递归终止时的处理办法。 提取重复的逻辑,缩小问题规模。 简单使用 一: 后台返回数据嵌套数据类型转换为数组 // 递归拿到部门数组 function:recursion(data){ for (const i in data) { ...
  • JavaScript递归函数

    千次阅读 2019-10-25 19:56:51
    JavaScript递归函数 什么是递归? 就是在函数体内调用本函数。是一种调用模式,是一种逻辑程序基础...注意:递归最重要的是终止条件。 利用递归计算n的阶乘 function acc(n){ if(n<=1){ return 1; }else{ ...
  • 函数中自己调用自己就是递归,切记要有终止条件,不然进入死循环 一、求和 (1)数字求和 function sum(n){ if(n===1){ return n=1 } return n+sum(n-1) } console.log(sum(5)); 执行顺序 5+sum(n-1...
  • JavaScript递归实现多维数组去重

    千次阅读 2018-10-11 09:33:21
    JavaScript递归实现多维数组去重 一维数组去重的方法有很多,这里就不一一概述了。而多维数组,第一个想法就是递归实现,本文简单阐述了思路及代码,若有其他见解,欢迎一起讨论。 在实现多维数组去重前,得先知道...
  • 我们考虑利用递归 就必须等有一个判断条件 中断 递归 不然容易出现死循环 我们在进如函数递归是 要注意第二次调用自身是 函数的参数要是数据的子数据 我们在进如函数递归是 要注意第二次调用自身是 函数的参数要是...
  • // 递归函数:将一个复杂问题,分解成几个简单的问题,然后重复下去并解决掉(每次递出去都要拿回来) // sum(n)=1+2+3+....n-1+n // sum(n-1)=1+2+3+....n-1 // sum(n)=sum(n-1)+n function sum(n){ if(n===...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,586
精华内容 4,234
关键字:

js递归终止条件