#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));}這樣的輸出結(jié)果就是?????qwef????xvb8如果改變數(shù)中第二個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));}這樣的輸出結(jié)果就是?????qwef???12758782513為什么會這樣?我只是改變了一個輸出語句,為什么會對函數(shù)的返回值產(chǎn)生影響?
3 回答


朕日理萬機(jī)
TA貢獻(xiàn)27條經(jīng)驗 獲得超28個贊
對不起前面說錯了,原因是在于fun函數(shù)只有n==0會返回確定的值,在n!=0的時候沒有指定返回值,導(dǎo)致了未定義行為。

朕日理萬機(jī)
TA貢獻(xiàn)27條經(jīng)驗 獲得超28個贊
兩次運行都會遞歸到fun(15,0)。然后到15%0,對0取余是未定義的行為,和除0是一樣的。編譯器可能會給出警告,但不仍然會通過。所以每次運行可能都會有不同的值,不是你輸出語句造成的。
- 3 回答
- 0 關(guān)注
- 1565 瀏覽
添加回答
舉報
0/150
提交
取消