最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js中遞歸函數(shù)的使用介紹

 更新時(shí)間:2012年10月25日 01:15:24   作者:  
所謂的遞歸函數(shù)就是在函數(shù)體內(nèi)調(diào)用本函數(shù)。使用遞歸函數(shù)一定要注意,處理不當(dāng)就會進(jìn)入死循環(huán)。遞歸函數(shù)只有在特定的情況下使用 ,比如階乘問題
下面我們就做一個(gè)10以內(nèi)的階乘試試看吧:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
 


遞歸函數(shù)的調(diào)用就說這么多了

js遞歸函數(shù)調(diào)用自身時(shí)的保險(xiǎn)方式。
來自js高級程序設(shè)計(jì)
一個(gè)典型階乘遞歸函數(shù):
復(fù)制代碼 代碼如下:

function fact(num){
if (num<=1){
return 1;
}else{
return num*fact(num-1);
}
}

以下代碼可導(dǎo)致出錯(cuò):
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //出錯(cuò)

由于fact已經(jīng)不是函數(shù)了,所以出錯(cuò)。
用arguments.callee可解決問題,這是一個(gè)指向正在執(zhí)行的函數(shù)的指針。
新的函數(shù)為:
復(fù)制代碼 代碼如下:

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


JS普通遞歸的改進(jìn)

遞歸函數(shù)是在一個(gè)函數(shù)通過名字調(diào)用自身的情況下構(gòu)成的,如下所示:
復(fù)制代碼 代碼如下:

function factorial(num)
{
if(num<=1)
{
return 1;
}
else
{
return num * factorial(num-1);
}
}

這是一個(gè)經(jīng)典的階乘函數(shù)。表面看來沒有什么問題,但下面的代碼卻可能導(dǎo)致它出錯(cuò)。
var anotherFactorial = factorial;

anotherFactorial(4); //輸出 24
factorial = null;
anotherFactorial (4); //TypeError: Property 'factorial' of object [object Window] is not a function chrome 下測試
原因在于,我們定義的函數(shù)名,其實(shí)是指向函數(shù)的一個(gè)指針,此時(shí)定義了anotherFactorial 也指向了那個(gè)函數(shù),所以調(diào)用anotherFactorial (4)可以成功的輸出24
此時(shí) factorial = null; 那么執(zhí)行定義函數(shù)的引用就剩下了anotherFactorial,那么在調(diào)用anotherFactorial(4)就會顯示以上的錯(cuò)誤的信息。
此時(shí)可以使用arguments.callee來替代函數(shù)定義中的 factorial,
函數(shù)的定義就變成了:
復(fù)制代碼 代碼如下:

function factorial(num)
{
if(num<=1)
{
return 1;
}
else
{
return num * arguments.callee(num-1);
}
}

那么在使用上面的4行測試代碼,最后一行測試代碼也可以成功的輸出24.
--------------------------------------
上述的內(nèi)容摘自<<JavaScript高級程序設(shè)計(jì)>>第2版 144頁 7.1節(jié)

相關(guān)文章

最新評論

盐池县| 南乐县| 东兴市| 田阳县| 安平县| 道真| 连云港市| 海兴县| 固安县| 花莲县| 上饶市| 崇义县| 黄骅市| 开江县| 盘山县| 渭源县| 丹巴县| 海城市| 钦州市| 东港市| 石棉县| 德格县| 兰州市| 清水河县| 颍上县| 建水县| 汝南县| 吐鲁番市| 彭泽县| 依兰县| 海城市| 滦南县| 木兰县| 准格尔旗| 汨罗市| 双流县| 绥化市| 大庆市| 土默特左旗| 广丰县| 柯坪县|