javascript遞歸函數(shù)定義和用法示例分析
遞歸函數(shù):是指函數(shù)直接或間接調(diào)用函數(shù)本身,則稱該函數(shù)為遞歸函數(shù)。
這句話理解起來并不難,從概念上出發(fā),給出以下的例子:
function foo(){ console.log("函數(shù) foo 是遞歸函數(shù)。"); foo(); }
這個例子的 foo 函數(shù)就是一個遞歸函數(shù)。
當(dāng)你把這個函數(shù)拿到瀏覽器上運行的時候,你會發(fā)現(xiàn)內(nèi)存溢出了,為什么呢?因為這個遞歸函數(shù)沒有停止處理或運算的出口,因此這個遞歸函數(shù)就演變?yōu)橐粋€死循環(huán)。
那如何使用遞歸呢?
使用遞歸函數(shù)必須要符合兩個條件:
1、 在每一次調(diào)用自己時,必須是(在某種意義上)更接近于解;
這句話怎么理解?
大家家里都有樓梯吧?比如從一樓走到二樓,那么我們的起點是一樓,目的地是二樓,當(dāng)你往上每走一個臺階是不是越接近二樓,也就是越接近目的地。
因此這句話可以這樣理解:函數(shù)每一次調(diào)用自己時,就越接近于我們期望它完成的任務(wù)的終點。
2、必須有一個終止處理或計算的出口。
這句話的意思是:必須要有一個標(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ù)類型的檢查,一定要保證有一個終止處理或計算的出口。否則很容易演變?yōu)樗姥h(huán),從而造成內(nèi)存溢出。
到此這篇關(guān)于javascript遞歸函數(shù)定義和用法示例分析的文章就介紹到這了,更多相關(guān)javascript遞歸函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用JavaScript來美化HTML的select標(biāo)簽的下拉列表效果
這篇文章主要介紹了用JavaScript來美化HTML的select標(biāo)簽的下拉列表效果的方法,而且在多瀏覽器下的兼容效果也得到提升,需要的朋友可以參考下2015-11-11為Javascript中的String對象添加去除左右空格的方法(示例代碼)
這篇文章主要介紹了為Javascript中的String對象添加去除左右空格的方法(示例代碼)。需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11微信小程序?qū)崿F(xiàn)二維碼簽到考勤系統(tǒng)
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)二維碼簽到考勤系統(tǒng),本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01JavaScript1.6數(shù)組新特性介紹以及JQuery的幾個工具方法
這篇文章主要是對JavaScript1.6數(shù)組新特性以及JQuery的幾個工具方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12JS中for...in?和?for...of?的區(qū)別解析
for?…?in?用于迭代對象的可枚舉字符串屬性,包括自身屬性和繼承的屬性,但不會遍歷對象的原型鏈上的?非可枚舉屬性,以及對象的方法,這篇文章主要介紹了JS中for...in?和?for...of?的區(qū)別,需要的朋友可以參考下2024-03-03JS實現(xiàn)為排序好的字符串找出重復(fù)行的方法
這篇文章主要介紹了JS實現(xiàn)為排序好的字符串找出重復(fù)行的方法,涉及JavaScript字符串運算相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-03-03