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

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

遞歸的輸出問題

遞歸的輸出問題

C C++
心雨翎馨 2017-03-17 21:01:49
#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函數只有n==0會返回確定的值,在n!=0的時候沒有指定返回值,導致了未定義行為。

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

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

兩次運行都會遞歸到fun(15,0)。然后到15%0,對0取余是未定義的行為,和除0是一樣的。編譯器可能會給出警告,但不仍然會通過。所以每次運行可能都會有不同的值,不是你輸出語句造成的。

查看完整回答
反對 回復 2017-03-18
  • 心雨翎馨
    心雨翎馨
    不是很懂,能不能說清楚點
  • 心雨翎馨
    心雨翎馨
    可是如果我去掉函數中第二個printf語句,無論怎么運行結果都不會變化、
  • 朕日理萬機
    朕日理萬機
    像15%0這個操作,運行結果不是確定的,不能控制,不能預料。哪怕你目前運行多次結果都一樣,但不保證換個機器,換個編譯器,重新編譯運行,還能得到同樣的結果。所以不管你是改了輸出語句,還是稍微改下代碼,在之前定義幾個int i, j, k等沒用的變量,都會對結果有影響,而且怎么影響不知道。不像15-0怎么算都是15
  • 3 回答
  • 0 關注
  • 1566 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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