第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

問個(gè)遞歸調(diào)用的問題

請問下面兩段代碼,為啥是其對應(yīng)的輸出結(jié)果呢?

1、輸出:120(重點(diǎn)想問n--的執(zhí)行順序,以及為什么這樣)

int?step(int?n)
{
????if?(n?>?1)?{
????????return?n--?*?step(n);
????}?else?{
????????return?1;
????}
}
int?main(int?argc,?char*?argv[])
{
????int?a?=?step(5);
????printf("%d",?a);
????return?0;
}

2、輸出:24

int?step(int?n)
{
????if?(n?>?1)?{
????????return?n?*?step(--n);
????}?else?{
????????return?1;
????}
}
int?main(int?argc,?char*?argv[])
{
????int?a?=?step(5);
????printf("%d",?a);
????return?0;
}


正在回答

1 回答

C語言運(yùn)算符有優(yōu)先級和結(jié)合性,但是參與運(yùn)算的操作數(shù)的求值順序并沒有規(guī)定。所以這兩個(gè)代碼是有問題的。

第一個(gè)例子中:

return 后面的 n-- 的值肯定是n,但是n自減在這個(gè)表達(dá)式中是什么時(shí)候發(fā)生的并不確定(在return語句后肯定減1了,但也沒意義了)

第二個(gè)例子:

step的參數(shù)--n的值肯定是n-1,而且在函數(shù)調(diào)用后n的值也肯定是減1了,但是由于操作數(shù)的求值順序未定,所以不能保證肯定先調(diào)用step函數(shù)。

這兩個(gè)代碼的行為都是未定義的,能出運(yùn)算結(jié)果不一定代表這就是“正確的”結(jié)果。

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

帥踢鍋 提問者

非常感謝!解釋很專業(yè)
2015-08-06 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

問個(gè)遞歸調(diào)用的問題

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號