請問這個JavaScript遞迴函式應該怎麼理解?

時間 2021-07-10 16:26:23

1樓:大斌子

我好像明白了,是不是這樣。

結束↑↑

f(5),x=5執行完畢。由於f(4)是當else塊內f(x-1),即f(5-1)、x=5時得出,並且f(5-1)(f(4))已經算出結果(彈4),所以f(5-1)執行完畢,f(5-1)下面的alert(x)語句得到x=5,彈出5。↑↑

f(4),x=4執行完畢。由於f(3)是當else塊內f(x-1),即f(4-1)、x=4時得出,並且f(4-1)(f(3))已經算出結果(彈3),所以f(4-1)執行完畢,f(4-1)下面的alert(x)語句得到x=4,彈出4。↑↑

f(3),x=3執行完畢。由於f(2)是當else塊內f(x-1),即f(3-1)、x=3時得出,並且f(3-1)(f(2))已經算出結果(彈2),所以f(3-1)執行完畢,f(3-1)下面的alert(x)語句得到x=3,彈出3。↑↑

f(2),x=2執行完畢。由於f(1)是當else塊內f(x-1),即f(2-1)、x=2時得出,並且f(2-1)(f(1))已經算出結果(彈1),所以f(2-1)執行完畢,f(2-1)下面的alert(x)語句獲得到x=2,彈出2。↑↑

f(1),x=1執行完畢。計算f(1)、x=1:由於1==1,if塊執行,if塊內的alert執行,彈出1。↑↑

計算f(2)、x=2:由於2≠1,if塊不執行,else塊執行。先計算f(2-1)即f(1)的結果,再把x=2代入alert(x)。

此時alert(x)並沒有獲得2,因為f(1)沒有執行完。↑↑

計算f(3)、x=3:由於3≠1,if塊不執行,else塊執行。先計算f(3-1)即f(2)的結果,再把x=3代入alert(x)。

此時alert(x)並沒有獲得3,因為f(2)沒有計算完。↑↑

計算f(4)、x=4:由於4≠1,if塊不執行,else塊執行。先計算f(4-1)即f(3)的結果,再把x=4代入alert(x)。

此時alert(x)並沒有獲得4,因為f(3)沒有計算完。↑↑

計算f(5)、x=5:由於5≠1,if塊不執行,else塊執行。先算出f(5-1)即f(4)的結果,再把x=5代入alert(x)。

此時alert(x)並沒有獲得5,因為f(4)沒有計算完。↑↑

開始

2樓:愛夏Lx

遞迴進去幾層,最後也得出來幾層。不然呼叫堆疊會不平衡。

舉個栗子。你帶著乙個數n進入乙個房間。房間裡有乙個人,你把n告訴他,他說n不是1,讓你進入裡面的房間,裡面的房間裡又有乙個人,你告訴他n-1,他說不是1,讓你繼續進去裡面的房間。

直到為1時,裡面的那個人告訴你,當時你進去時告訴他的數並讓你出來。所以,每當出來乙個房間都會有人告訴你,之前你進去時對他說的數,直到最外面的房間。

為什麼房間裡每個人都不是同乙個人(不共享資料)?因為整型做引數時,傳遞的是值,而不是址。

3樓:

你執行一下不就知道了嗎?「應該」不「應該」,瀏覽器說了算。

你可以加乙個全域性變數,並輸出,看看執行的順序。

(如果會用Firebug等工具,建議把alert改成console.log)

var i = 0;

function f(xi++;

alert('step' + i + ' x=' + x);

if(x == 1alert(x);

}elsef(x - 1alert(xf(5);

請問這個極限

jqy123 考慮函式 易證 在 上恆成立,所以 是增函式。令 因為 0 eeimg 1 所以 b b 1 eeimg 1 0 eeimg 1 以此類推,可知 0,eeimg 1 所以 是遞增數列。再考慮函式 易知當 時,0 eeimg 1 遞增且 當 1 a eeimg 1 時,遞減且 當 時,0...

請問這個算是悖論麼?

真理是集合,有些真理 子集A 掌握在大部分人手裡,有些 子集B 在少數人手裡。那這個問題的真理是屬於子集A還是B呢?我的結論是屬於A子集。至於是不是哲學悖論,我倒覺得不是哲學問題,反而是語文和數學問題。問題的 真理 表述不清,是某個還是全體?表述邏輯清楚了,另外,高中數學集合論就能解決。 知音 不算...

請問這個面積怎麼算?

芋圓 A點速度只沿杆方向,杆的兩個端點速度都是牆壁方向,所以杆的瞬心就是右上角的那個點,A點就是所求的那個點。是這樣嗎 馬琳 馬琳 求面積之前要先把曲線方程寫出來。曲線方程可以用物理方法求出。對於曲線上的任意一點 x,y 曲線在此點處的切線就是杆 的方向 切點就是杆與曲線的切點 唯一的交點 桿上各點...