3 回答

TA貢獻2條經驗 獲得超0個贊
為啥輸出 3 3 4:最開始num1的值是5,判斷>3成立,--num1的意思是調用前先自減,所以首先自減變成4,然后調用abc(4),同理adc(4)里num1變成3了,然后調用abc(3),abc(3)里直接輸出3 ,回到abc(4),輸出3,回到abc(5),輸出4。
下面那段代碼語法上在我看來沒有錯,只不過abc(num1--)這樣寫的話就變成死循環了,num1--的意思是先調用再自減,這樣的話就會一直在調用adc(5),一直循環下去

TA貢獻20條經驗 獲得超10個贊
遞歸:函數里調用函數本身。先一層層的調用函數,直到停止調用,再一層層的返回執行先前未執行完的內容。
使用遞歸一定要有條件來阻止程序死循環。
前置遞減:--i是語句求值之前i的值先減1,即先執行i= i-1,再(--i)=i; ?例如i = 2,那么i = i-1 =1, ?(--i) = i = 1。
后置遞減:i--是語句求值之后i的值才減1,即先執行(i--)=i,再i= i-1; ?例如i = 2,那么(i--) = i = 2, i= i-1 = 1。
所以第二個例子實際上一直在調用abc(5),無法判斷停止調用,陷入死循環,至于會不會報錯,額,我也才在學,沒試過。

TA貢獻4條經驗 獲得超2個贊
建議熟悉一下遞歸函數的原理就會很好理解了;
調用第一個函數abc(5)【注意,函數體中"document.write(4)"暫時不會去執行,但是等if()里昨晚就會來執行】;時,就會進入函數體執行abc(4)【同上面的注意,document,write(3)】--->執行abc(3)【這時3不大于3,就不會進入if(),首次執行document.write(3)】---->回到abc(4)中(由于--num),document(3);在回到adb(5),打印4;最終打印3,3,4
添加回答
舉報