首頁 > web前端 > js教程 > 主體

JavaScript中遞迴函數的使用詳解

黄舟
發布: 2017-11-18 10:50:44
原創
2213 人瀏覽過

在我們之前的一篇文章中,我們給大家解析了一下JavaScript中的遞歸函數,相信對此有所了解,那麼家JavaScript中的遞歸函數如何使用呢?今天就帶大家詳細的介紹下JavaScript中遞迴函數的使用!

 所謂的遞歸函數就是在函數體內呼叫本函數。使用遞歸函數一定要注意,處理不當就會進入死循環。遞歸函數只有在特定的情況下使用,例如階乘問題

下面我們就做一個10以內的階乘試試看: 

[Ctrl+A 全選注:如需引入外部Js需刷新才能執行]

遞歸函數的呼叫就說這麼多了

js遞歸函數呼叫自身時的保險方式。
來自js高階程式設計
一個典型階乘遞歸函數:

程式碼如下:

function fact(num){ 
if (num<=1){ return 1; 
}else{ 
return num*fact(num-1); 
} 
}
登入後複製

以下程式碼可導致出錯: 

var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //出错
登入後複製

#由於fact已經不是函數了,所以出錯。 
用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.
登入後複製

#JS普通遞迴的改進

遞迴函數是在一個函數透過名字呼叫自身的情況下構成的,如下所示:

程式碼如下:

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * factorial(num-1); 
} 
}
登入後複製

這是一個經典的階乘函數。表面看來沒有什麼問題,但下面的程式碼可能導致它出錯。

var anotherFactorial = factorial; 
anotherFactorial(4); //输出 24 
factorial = null;
登入後複製

anotherFactorial (4); //TypeError: Property 'factorial' of object [object Window] is not a function chrome 下測試
# 原因在於,我們定義的函數名,其實是指向函數的一個指針,此時定義了anotherFactorial 也指向了那個函數,所以調用anotherFactorial (4)可以成功的輸出24
此時factorial = null; 那麼執行定義函數的參考就剩下了anotherFactorial,那麼在呼叫anotherFactorial(4)就會顯示以上的錯誤的資訊。
此時可以使用arguments.callee來取代函數定義中的factorial,
函數的定義就變成了:

程式碼如下:

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * arguments.callee(num-1); 
} 
}
登入後複製

那麼在使用上面的4行測試程式碼,最後一行測試程式碼也可以成功的輸出24. 

#總結:

透過上述文章的詳細介紹,相信小夥伴們對JavaScript中遞歸函數的使用有了進一步的了解,希望對你的工作有幫助!

相關推薦:

#JavaScript中遞迴函數的解析與說明


JS中遞迴函數


#

JavaScript中遞歸函數的細化認識以及範例程式碼分享

#

以上是JavaScript中遞迴函數的使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!