亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于Js函數調用過程的一道題,求大神賜教

關于Js函數調用過程的一道題,求大神賜教

榎目貴音 2016-04-03 22:51:22
function?abc(num1){ ???if(num1>3){ ???????abc(--num1); } document.writeln(num1);? }??? abc(5);為什么最后輸出出來是3 3 4?而下面這個代碼為什么會出錯?function?abc(num1){ ???if(num1>3){ ???????abc(num1--); } document.writeln(num1);? }??? abc(5);求大神解惑,小白感激不盡
查看完整描述

3 回答

已采納
?
Nasei

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),一直循環下去

查看完整回答
反對 回復 2016-04-04
  • qq_騎豬看夕陽_3
    qq_騎豬看夕陽_3
    function abc(num1){ document.writeln(num1); if(num1>3){ document.writeln(num1+"-上-"); //遞歸調用 abc(--num1); document.writeln(num1+"-下-"); } document.writeln(num1+"++"); } 為什么運行流程輸出如下結果: 5 5-上- 4 4-上- 3 3++ 3-下- 3++ 4-下- 4++
  • Nasei
    Nasei
    你這段代碼和這個問題的一樣的呀,一步步走下來就是這樣的,我這么和你說吧,首先num1的值是5,所以document.writeln(num1);會輸出一個5,然后作判斷大于3成立,這時候document.writeln(num1+"-上-");就會輸出5-上-,然后走到abc(--num1);這時候num1先自減為4,然后調用abc(4);調用完abc(4)之后,執行document.writeln(num1+"-下-");document.writeln(num1+"++");分別輸出4-下- 4++,所以輸出其實就是:5 5-上- [abc(4)的輸出] 4-下- 4++,abc(4)的輸出和abc(5)邏輯上一模一樣的,可以類比出來abc(4)的輸出:4 4-上- [abc(3)的輸出] 3-下- 3++,這樣abc(5)的輸出就是:5 5-上- 4 4-上- [abc(3)的輸出] 3-下- 3++ 4-下- 4++,abc(3)輸出就顯而易見了,就是3 3++,全部合起來就是5 5-上- 4 4-上- 3 3++ 3-下- 3++ 4-下- 4++
?
深山小童

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),無法判斷停止調用,陷入死循環,至于會不會報錯,額,我也才在學,沒試過。

查看完整回答
反對 回復 2016-04-12
?
xufeng123456

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

查看完整回答
反對 回復 2016-04-04
  • 3 回答
  • 0 關注
  • 1567 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號