必威体育Betway必威体育官网
当前位置:首页 > IT技术

js 递归调用

时间:2019-10-10 03:40:00来源:IT技术作者:seo实验室小编阅读:50次「手机版」
 

递归调用

程序员不止眼前的逻辑和代码,还有底层的框架架构

1. 前言

最近在做一个复杂表格设计数据格式设置,其中用到了多叉树的原理,所以要用到递归来实现数据格式化

2. 递归的概念

在程序中函数直接或间接调用自己

注意:使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题。

3. 例子

1. 一个阶乘的例子:

function fact(num) {
       if (num <= 1) {
                return 1;
       } else {
                return num * fact(num - 1);
       }
}
fact(3) // 结果为 6

以下代码可导致出错:

var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //出错 

由于fact已经不是函数了,所以出错。

使用arguments.callee

arguments.callee 是一个指向正在执行的函数的指针,arguments.callee 返回正在被执行的对现象。

新的函数为:

function fact(num){ 
    if (num<=1){ 
        return 1; 
    }else{ 
        return num*arguments.callee(num-1); //此处更改了。 
    } 
} 
var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //结果为24. 

2.再看一个多叉树的例子:

先看图

多叉树.png

数据结构格式,参考如下代码:

headerData: {
                name: '总数据',
                children: [
                    {
                        name: '数据1',
                        children: [
                            {
                                name: '数据11',
                                children: [
                                    {
                                        name: '数据111',
                                    },
                                    {
                                        name: '数据112',
                                    }
                                ]
                            },
                            {
                                name: '数据12',
                                children: [
                                    {
                                        name: '数据121',
                                    },
                                    {
                                        name: '数据122',
                                    }
                                ]
                            },
                            {
                                name: '数据13',
                                children: [
                                    {
                                        name: '数据131',
                                    },
                                    {
                                        name: '数据132',
                                    }
                                ]
                            },
                            {
                                name: '数据14',
                            },

                        ]
                    }
                ]
            }

我们如何获取节点的所有叶子节点个数呢? 递归代码如下:

/**
 * 获取 节点的所有 叶子节点 个数
 * @param {Object} json Object对象
 */
function getLeafCountTree(json) {
  if(!json.children){
      return 1;
  }else{
      var leafCount = 0;
      for(var i = 0 ; i < json.children.length ; i++){
          leafCount = leafCount + getLeafCountTree(json.children[i]);
      }
      return leafCount;
  }
}

最后

递归遍历是比较常用的方法,比如:省市区遍历成树、多叉树、阶乘等。

希望本文对你有点帮助。

有兴趣的朋友可以扫下方二维码关注我的公众号—— 爱写bugger的阿拉斯加

分享 web 开发相关的技术文章,热点资源,全栈程序员的成长之路

( 不喂一波狗粮,阿拉斯加就变废 dog 了,汪汪汪!)

爱写bugger的阿拉斯加

相关阅读

js实现四舍五入,且保留两位小数

实现步骤 <script> var num=112.2546845; console.log(num.toFixed(2)); //112.255 </script>

json之containsKey

1 json中有一个函数是用于判断属性是否存在的。如果存在则返回true,如果不存在则返回false。该方法就是containsKey方法如:JSONObje

Modernizr.js-使用

下载 Modernizr 与其它 JavaScript 库相同的是,Modernizr 可提供 development 和 production 版本。 与大多数库相比,唯一的不同之

VueJS简明教程(一)之基本使用方法

简介:这是一篇超级简单的入门文章 如果说是JQuery是手工作坊,那么Vue.js就像是一座工厂,虽然Vue.js做的任何事情JQuery都可以做,但

JS中关于a+aa+aaa+aaaa的简便计算方法

题目Sn=a+aa+aaa+aaaa....+n个a 这个题一个难点就是a的位数是变动的,第一项是一位,第二项是两位,第三项是三位。 首先累加一定要是循

分享到:

栏目导航

推荐阅读

热门阅读