你將代碼整個在腦子里走一遍就明白了
創(chuàng)新互聯(lián)建站專注于甘南網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供甘南營銷型網(wǎng)站建設(shè),甘南網(wǎng)站制作、甘南網(wǎng)頁設(shè)計、甘南網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造甘南網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供甘南網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
首先從外部調(diào)用f(5)進入方法
這時方法內(nèi)的參數(shù)x為5
那么if(x == 1)這個條件不成功繼續(xù)執(zhí)行else
else里再次調(diào)用了本方法f(x - 1),只是參數(shù)變成了4
這樣一直排執(zhí)行到x=1時彈出alert("1");
注意,這時方法并沒有執(zhí)行結(jié)束,有沒有忘記
前面執(zhí)行else的時候只想著再次調(diào)用了本方法f(x - 1),但是后面還有一句呢alert(x);
當(dāng)彈出1時相當(dāng)于上一個else里的f(x - 1);這條執(zhí)行結(jié)束了,那接下來是不是還要執(zhí)行alert(x);
同樣的前面的alert(x);都在等待后面的語句執(zhí)行完一一都會執(zhí)行一次
現(xiàn)在是否明白了
其實難點就在于對遞歸函數(shù)的理解。所謂遞歸函數(shù),就是函數(shù)在執(zhí)行時調(diào)用自己。程序在調(diào)用一個函數(shù)時,首先執(zhí)行這個函數(shù)的程序,執(zhí)行完畢后返回到原調(diào)用前的上一級程序繼續(xù)運行這一級程序。調(diào)用遞歸函數(shù)也是如此,在執(zhí)行完遞歸函數(shù),得到3之后,它要退出遞歸函數(shù)回到調(diào)用它的原來的主程序繼續(xù)去執(zhí)行原來的主程序。由于調(diào)用遞歸函數(shù)時程序是逐級進行的,所以返回時也是逆向逐級執(zhí)行程序并返回的,即在得到3后,返回上一級執(zhí)行這一級的程序就得到4(即再次執(zhí)行document.writeln(num1)),再返回上一級執(zhí)行這一級的程序得到5(即再次執(zhí)行document.writeln(num1))。
function getArrayValue(){ var arr = new Array(['a','b','c'],['d','e','f']);//二維數(shù)組 for(i=0;iarr.length;i++){ var tmpArr = new Array(); tmpArr = arr[i]; for(j=0;jtmpArr.length;j++){ var tmp = tmpArr[j]; alert(tmp); } } } 給你一個例子,多維的話可以在循環(huán)。(可能方法比較笨,但是好用)
我先來解釋無限遞歸
先舉一個生活中的例子,就是那個經(jīng)典的《老和尚給小和尚講故事》的故事:
從前有座山,山里有個廟,廟里有個老和尚給小和尚講故事。
講的是什么故事呢?
講的是:
從前有座山,山里有個廟……
這就是無限遞歸了。
再來說一下你的程序發(fā)生無限遞歸的原因:
ajQuery?是一個函數(shù)。執(zhí)行這個函數(shù)時,函數(shù)中的?return?語句會返回一個值。
它會返回什么值呢?
返回值是執(zhí)行一個新的?ajQuery?函數(shù)的返回值,
那么這個新的?ajQuery?函數(shù)會返回什么值呢?
這個新的?ajQuery?函數(shù)會返回又一個新的?ajQuery?函數(shù)的返回值,
……
這是無限遞歸,也是一種死循環(huán)。
最后說一下發(fā)生溢出的原因:
每次執(zhí)行?ajQuery?函數(shù),
都會在結(jié)束前執(zhí)行又一個新的?ajQuery?函數(shù),
并等待它結(jié)束,然后自身才能結(jié)束。
每執(zhí)行一個函數(shù)都要占用一些資源,只有函數(shù)結(jié)束后才有可能釋放這些資源。
可是,在無限遞歸過程中,不斷地執(zhí)行一個又一個函數(shù),卻從不結(jié)束這些函數(shù)。
所以,占用的資源就會越來越多。
直到占用的資源超出了允許的范圍,就溢出了!
var?a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;
//?遞歸賦值
setval(1,?100);
//?打印驗證
document.write('打印驗證:br');
for?(var?i=1;i=10;i++)?{
document.write('a'+i+'?=?');
eval('document.write(a'+i+')');
document.write('br');
}
function?setval($var_i,?$var_val)?{
if?($var_i??10)?return?false;
eval('a'?+?$var_i?+?'?=?'?+?$var_val?+?';');
$var_i?++;
$var_val?+=?100;
setval($var_i,?$var_val);
}
網(wǎng)站標(biāo)題:javascript遞歸,js反向遞歸
分享URL:http://chinadenli.net/article18/dsdeddp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、建站公司、網(wǎng)站營銷、品牌網(wǎng)站設(shè)計、商城網(wǎng)站、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)