位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > JavaScript > 問(wèn)題詳情

JavaScript 遞歸運(yùn)算

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-25

■知識(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)

}

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部