JavaScript 递归运算
■知识点
递归必须由两部分组成。
递归调用的过程。
递归终止的条件。
在没有限制的情况下,递归运算会无终止地自身调用。因此,在递归运算中要结合if语句进行控制,只有在某个条件成立时才允许执行递归,否则不允许调用自身。
■实例设计
递归运算的应用场景如下。
(1)求解递归问题
其主要解决一些数学运算,如阶乘函数、幂函数和斐波那契数列。
【示例1】下面的示例使用递归运算来设计阶乘函数。
var f = function ( x ) {
if ( x < 2 ) return 1; //递归终止的条件
else return x * f( x - 1 ); //递归调用的过程
}
console.log ( f ( 5 )); //返回5的阶乘值为120
在这个过程中,利用分支结构把递归结束的条件和递归运算分开。
(2)解析递归型数据结构
很多数据结构都具有递归特性,如DOM文档树、多级目录结构、多级导航菜单就、家族谱系结构等。对于这类数据结构,使用递归算法进行遍历比较合适。
【示例2】下面使用递归运算计算指定节点内所包含的全部节点数。
function f( n ){ //统计指定节点及其所有子节点的元素个数
var 1 = 0 ; //初始化计数变量
if( n.nodeType == 1 ) 1 ++ ; //如果是元素节点,则计数
for( var i = 0; i < child.length; i ++ ){ //获取子节点
1 += f( child[i] ); //遍历所有子节点
}
return 1; //返回节点数
}
window.onload = function(){
console.log( f( document.body ) ) //返回2,即body和script两个节点
}
点击加载更多评论>>