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

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

遞歸輸出問題

遞歸輸出問題

C C++
心雨翎馨 2017-03-17 20:58:59
#include<stdio.h> int?fun(int?m,int?n) { if(n==0) return?m; printf("?????qwef\n"); fun(n,m%n); printf("????xvb\n"); } void?main() { int?m=45,n=15; printf("%d",fun(m,n)); } 這樣的輸出結果就是 ?????qwef ????xvb 8 如果改變數中第二個printf則 #include<stdio.h> int?fun(int?m,int?n) { if(n==0) return?m; printf("?????qwef\n"); fun(n,m%n); printf("???127587825\n"); } void?main() { int?m=45,n=15; printf("%d",fun(m,n)); } 這樣的輸出結果就是 ?????qwef ???127587825 13
查看完整描述

4 回答

?
墨以所生

TA貢獻4條經驗 獲得超1個贊

fun函數中fun(n,m);應該在主函數中用來取返回值或者調用的。比如Num=fun(n,m); 還有fun應該加一個返回值return 變量名;
查看完整回答
1 反對 回復 2017-03-18
?
半枯

TA貢獻101條經驗 獲得超45個贊

這個是被fun里面的printf影響的,如果你把值設成m=15,n=0,輸出結果就是m的值,為什么,n為其他值的時候輸出的結果不是m的值,是因為帶printf的fun不再是int類型,超了

查看完整回答
反對 回復 2017-03-18
?
慕粉2104107182

TA貢獻1條經驗 獲得超0個贊

返回值不應該是15嗎,而且應該在兩個輸出句中間。不懂啊
查看完整回答
反對 回復 2017-03-18
?
墨以所生

TA貢獻4條經驗 獲得超1個贊

呃,我有點不明白你想要做什么
查看完整回答
反對 回復 2017-03-18
?
__YXQ__

TA貢獻48條經驗 獲得超15個贊

遞歸后的輸出語句未知的影響了函數的返回值,想了很久也不知道為什么,樓主知道了麻煩告訴我一聲哈

查看完整回答
反對 回復 2017-03-18
  • 心雨翎馨
    心雨翎馨
    我也很想知道。我問老師的老師沒回我傷心T_T
  • 朕日理萬機
    朕日理萬機
    參見我的回答,因為用了對零取余這種未定義行為。。。其實你要自己運行一下這個程序,可能既不是8也不是13。
?
心雨翎馨

TA貢獻3條經驗 獲得超0個贊

為什么會這樣?我只是改變了一個輸出語句

查看完整回答
反對 回復 2017-03-17
?
朕日理萬機

TA貢獻27條經驗 獲得超28個贊

咦,我昨天好像回答過一次了,m%n,當n=0時是未定義行為,結果不可預測,跟你運行時內存里的情況有關。所以源代碼里稍微改一下,就可能對運行時的內存產生影響,就會產生完全不一樣的結果。所以不管是8,還是13,都是一種巧合。

查看完整回答
反對 回復 2017-03-19
  • 心雨翎馨
    心雨翎馨
    可是當我不加函數中的第二個printf語句是這個程序結果都是對的這又是為什么
  • 朕日理萬機
    朕日理萬機
    目測你是要用輾轉相除法求最大公約數?45和15的最大公約數是15,你一個輸出8,一個輸出13,都不對啊。退一步說即使有某個巧合是輸出了15,那也是因為那片內存曾經放過一個15,后來該內存被釋放了,值留在了那里,然后你的未定義的結果碰巧用那個值當結果了,仍然是個巧合。
  • 朕日理萬機
    朕日理萬機
    哎呀不好意思我看錯了,問題不在取余,我重新回復一下。。。
  • 4 回答
  • 0 關注
  • 2445 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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