溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用javascript遞歸函數(shù)

發(fā)布時間:2020-07-23 09:01:47 來源:億速云 閱讀:206 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要講解了如何使用javascript遞歸函數(shù),內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。

遞歸函數(shù):是指函數(shù)直接或間接調(diào)用函數(shù)本身,則稱該函數(shù)為遞歸函數(shù)。

這句話理解起來并不難,從概念上出發(fā),給出以下的例子:

function foo(){
 console.log("函數(shù) foo 是遞歸函數(shù)。");
 foo();
}

這個例子的 foo 函數(shù)就是一個遞歸函數(shù)。

當(dāng)你把這個函數(shù)拿到瀏覽器上運(yùn)行的時候,你會發(fā)現(xiàn)內(nèi)存溢出了,為什么呢?因?yàn)檫@個遞歸函數(shù)沒有停止處理或運(yùn)算的出口,因此這個遞歸函數(shù)就演變?yōu)橐粋€死循環(huán)。

那如何使用遞歸呢?

使用遞歸函數(shù)必須要符合兩個條件:

1、 在每一次調(diào)用自己時,必須是(在某種意義上)更接近于解;

這句話怎么理解?

大家家里都有樓梯吧?比如從一樓走到二樓,那么我們的起點(diǎn)是一樓,目的地是二樓,當(dāng)你往上每走一個臺階是不是越接近二樓,也就是越接近目的地。
因此這句話可以這樣理解:函數(shù)每一次調(diào)用自己時,就越接近于我們期望它完成的任務(wù)的終點(diǎn)。

2、必須有一個終止處理或計(jì)算的出口。

這句話的意思是:必須要有一個標(biāo)準(zhǔn)的標(biāo)志,讓函數(shù)結(jié)束調(diào)用函數(shù)自身。
比如,怎么知道你已經(jīng)走到二樓了呢?當(dāng)你看到有個門,門牌上寫著 2F 的,然后推開它跨過去,那么你就到二樓了。

用遞歸輸出對象里包含的所有屬性值(包括對象里的子孫對象):

var obj = {
 a:{
  name:"john",
  age:26,
  sex:"male",
  child:{
   firstChild:"mak",
   laseChild:"loy"
  }
 },

 b:{
  name:"joe", 
  age:28, 
  sex:"female", 
  child:{
   firstChild:"bill", 
   secondChild:"ruth", 
   laseChild:"yoki"
  }
 }
};

function getObjValue(obj){
 for(var k in obj){
  if(typeof obj[k] !== "object"){
   console.log(obj[k]); //遞歸出口
  }else{
   getObjValue(obj[k]); //函數(shù)調(diào)用函數(shù)自身
  }
 }
};

getObjValue(obj);

// 輸出結(jié)果:

// name=john
// age=26
// sex=male
// firstChild=mak
// laseChild=loy
// name=joe
// age=28
// sex=female
// firstChild=bill
// secondChild=ruth
// laseChild=yoki

使用建議:在使用遞歸時,要注意對遞歸函數(shù)的參數(shù)類型的檢查,一定要保證有一個終止處理或計(jì)算的出口。否則很容易演變?yōu)樗姥h(huán),從而造成內(nèi)存溢出。

看完上述內(nèi)容,是不是對如何使用javascript遞歸函數(shù)有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI