递归调用
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.再看一个多叉树的例子:
先看图
数据结构格式,参考如下代码:
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 了,汪汪汪!)
相关阅读
实现步骤 <script> var num=112.2546845; console.log(num.toFixed(2)); //112.255 </script>
1 json中有一个函数是用于判断属性是否存在的。如果存在则返回true,如果不存在则返回false。该方法就是containsKey方法如:JSONObje
下载 Modernizr 与其它 JavaScript 库相同的是,Modernizr 可提供 development 和 production 版本。 与大多数库相比,唯一的不同之
简介:这是一篇超级简单的入门文章 如果说是JQuery是手工作坊,那么Vue.js就像是一座工厂,虽然Vue.js做的任何事情JQuery都可以做,但
题目Sn=a+aa+aaa+aaaa....+n个a 这个题一个难点就是a的位数是变动的,第一项是一位,第二项是两位,第三项是三位。 首先累加一定要是循