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