1. 程式人生 > 程式設計 >javascript遞迴函式定義和用法示例分析

javascript遞迴函式定義和用法示例分析

遞迴函式:是指函式直接或間接呼叫函式本身,則稱該函式為遞迴函式。

這句話理解起來並不難,從概念上出發,給出以下的例子:

function foo(){
 console.log("函式 foo 是遞迴函式。");
 foo();
}

這個例子的 foo 函式就是一個遞迴函式。

當你把這個函式拿到瀏覽器上執行的時候,你會發現記憶體溢位了,為什麼呢?因為這個遞迴函式沒有停止處理或運算的出口,因此這個遞迴函式就演變為一個死迴圈。

那如何使用遞迴呢?

使用遞迴函式必須要符合兩個條件:

1、 在每一次呼叫自己時,必須是(在某種意義上)更接近於解;

這句話怎麼理解?

大家家裡都有樓梯吧?比如從一樓走到二樓,那麼我們的起點是一樓,目的地是二樓,當你往上每走一個臺階是不是越接近二樓,也就是越接近目的地。

因此這句話可以這樣理解:函式每一次呼叫自己時,就越接近於我們期望它完成的任務的終點。

2、必須有一個終止處理或計算的出口

這句話的意思是:必須要有一個標準的標誌,讓函式結束呼叫函式自身。
比如,怎麼知道你已經走到二樓了呢?當你看到有個門,門牌上寫著 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]); //函式呼叫函式自身
  }
 }
};

getObjValue(obj);

// 輸出結果:

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

使用建議:在使用遞迴時,要注意對遞迴函式的引數型別的檢查,一定要保證有一個終止處理或計算的出口。否則很容易演變為死迴圈,從而造成記憶體溢位。

到此這篇關於javascript遞迴函式定義和用法示例分析的文章就介紹到這了,更多相關javascript遞迴函式內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!