#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????xvb8如果改變數中第二個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???12758782513為什么會這樣?我只是改變了一個輸出語句,為什么會對函數的返回值產生影響?
3 回答


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