JavaScript 遞歸運(yùn)算
■知識(shí)點(diǎn)
遞歸必須由兩部分組成。
遞歸調(diào)用的過(guò)程。
遞歸終止的條件。
在沒(méi)有限制的情況下,遞歸運(yùn)算會(huì)無(wú)終止地自身調(diào)用。因此,在遞歸運(yùn)算中要結(jié)合if語(yǔ)句進(jìn)行控制,只有在某個(gè)條件成立時(shí)才允許執(zhí)行遞歸,否則不允許調(diào)用自身。
■實(shí)例設(shè)計(jì)
遞歸運(yùn)算的應(yīng)用場(chǎng)景如下。
(1)求解遞歸問(wèn)題
其主要解決一些數(shù)學(xué)運(yùn)算,如階乘函數(shù)、冪函數(shù)和斐波那契數(shù)列。
【示例1】下面的示例使用遞歸運(yùn)算來(lái)設(shè)計(jì)階乘函數(shù)。
var f = function ( x ) {
if ( x < 2 ) return 1; //遞歸終止的條件
else return x * f( x - 1 ); //遞歸調(diào)用的過(guò)程
}
console.log ( f ( 5 )); //返回5的階乘值為120
在這個(gè)過(guò)程中,利用分支結(jié)構(gòu)把遞歸結(jié)束的條件和遞歸運(yùn)算分開(kāi)。
(2)解析遞歸型數(shù)據(jù)結(jié)構(gòu)
很多數(shù)據(jù)結(jié)構(gòu)都具有遞歸特性,如DOM文檔樹(shù)、多級(jí)目錄結(jié)構(gòu)、多級(jí)導(dǎo)航菜單就、家族譜系結(jié)構(gòu)等。對(duì)于這類數(shù)據(jù)結(jié)構(gòu),使用遞歸算法進(jìn)行遍歷比較合適。
【示例2】下面使用遞歸運(yùn)算計(jì)算指定節(jié)點(diǎn)內(nèi)所包含的全部節(jié)點(diǎn)數(shù)。
function f( n ){ //統(tǒng)計(jì)指定節(jié)點(diǎn)及其所有子節(jié)點(diǎn)的元素個(gè)數(shù)
var 1 = 0 ; //初始化計(jì)數(shù)變量
if( n.nodeType == 1 ) 1 ++ ; //如果是元素節(jié)點(diǎn),則計(jì)數(shù)
for( var i = 0; i < child.length; i ++ ){ //獲取子節(jié)點(diǎn)
1 += f( child[i] ); //遍歷所有子節(jié)點(diǎn)
}
return 1; //返回節(jié)點(diǎn)數(shù)
}
window.onload = function(){
console.log( f( document.body ) ) //返回2,即body和script兩個(gè)節(jié)點(diǎn)
}
點(diǎn)擊加載更多評(píng)論>>