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

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

進制轉(zhuǎn)換函數(shù)沒有看懂

進制轉(zhuǎn)換函數(shù)沒有看懂

C
qq_superman_24 2018-06-14 20:35:23
#include <stdio.h>#include <string.h>void change(char *s,int n,int b);int main(){?int num,base;?char s[100];?printf("請輸入一個數(shù):\n");?scanf("%d",&num);?printf("請輸入要轉(zhuǎn)換的進制\n");?scanf("%d",&base);??? change(s,num,base);?printf("%d轉(zhuǎn)換成%d進制為:%s\n",num,base,s);?return 0;}void change(char *s,int n,int b){?char bit[]={"0123456789ABCDEF"};?int len; ?if(n==0)??? {??? ?strcpy(s,"");??? ?return; ? ???}?change(s,n/b,b); ? 這個函數(shù)一直調(diào)用自己,最后n=0了,s中保存的內(nèi)容不就是空的直接返回了嗎?下面的語句不就沒用了。?len=strlen(s);?s[len]=bit[n%b];?s[len+1]='\0'; }
查看完整描述

2 回答

已采納
?
onemoo

TA貢獻883條經(jīng)驗 獲得超454個贊

“階乘問題中不斷遞歸得出結(jié)果即可,而這個問題...” 從這句話來看,你可能也并沒有真正理解那個階乘的遞歸過程。因為這兩個代碼邏輯都是“遞歸”,并沒有本質(zhì)的區(qū)別。


為什么你會覺得“后面的語句不會執(zhí)行”呢??這或許說明,你可能沒搞清楚函數(shù)的執(zhí)行流程(不僅指遞歸函數(shù))。


我?guī)湍阏硐滤悸罚阍囍治鱿逻@個 change 函數(shù)的執(zhí)行流程:

你疑惑的那三條語句存在于函數(shù)中,前面也沒有必然的 return 語句跳過它們,為什么不會被執(zhí)行呢!

哦,前面是有個 return,但那是在 if 中,也就是只有當(dāng)參數(shù) n 為 0 時才會執(zhí)行那個 return。那么當(dāng)參數(shù) n 不為 0 時,if 后面的語句都會被依序執(zhí)行的。你仔細想想代碼的執(zhí)行流程,是不是這樣?

if 語句后面的語句具體來說有 4 條:

change函數(shù)調(diào)用

len=strlen(s);

s[len]=bit[n%b];

s[len+1]='\0';

不要被又調(diào)用了 change 搞亂思路。從函數(shù)執(zhí)行流程上來說,這只不過是調(diào)用了一個函數(shù)而已,和調(diào)用別的什么函數(shù)沒有區(qū)別!? 注意:我們這里只分析代碼的執(zhí)行流程。如果 change 這個名字會引起你的混亂,那么我們暫稱它為“abc函數(shù)”好了。

那么最基礎(chǔ)的知識:當(dāng)abc函數(shù)調(diào)用執(zhí)行結(jié)束之后,該執(zhí)行哪個語句?? 當(dāng)然是abc函數(shù)調(diào)用語句后面的語句了!? 所以,當(dāng) change 函數(shù)調(diào)用結(jié)束后,len = strlen(s);... 這三條語句都會依次執(zhí)行的。

好了,到這里,你是否理清了 change 的具體執(zhí)行流程呢? 只是說執(zhí)行流程,先別管每一次的執(zhí)行結(jié)果。


如果你明白了執(zhí)行流程,那么你可以用簡單的例子,在紙上推演下在上述流程中的每一步都發(fā)生了什么。比如“15 轉(zhuǎn)八進制”(你提到的轉(zhuǎn)二進制步驟太多,紙上推演的話太麻煩了)

如果你能成功推演,那么你就已經(jīng)搞明白了這個遞歸是怎么回事。 如果不能再告訴我,我?guī)湍阃蒲荨?/p>

查看完整回答
反對 回復(fù) 2018-06-16
?
onemoo

TA貢獻883條經(jīng)驗 獲得超454個贊

如果你對此代碼的疑惑是在“這個函數(shù)一直調(diào)用自己...”這里,那么你應(yīng)該先去理解下什么是“遞歸”。


這個代碼中“一直調(diào)用自己”的行為就是遞歸。下面那些語句當(dāng)然不是沒用的,它們會被執(zhí)行到的。

當(dāng)你明白了遞歸如何工作后,就能弄明白這段代碼的行為。所以,先去理解下遞歸吧。


我之前曾經(jīng)解釋過關(guān)于遞歸的問題,你試著參考下,看看能不能明白遞歸的運作方式:http://idcbgp.cn/qadetail/90499

查看完整回答
反對 回復(fù) 2018-06-15
  • qq_superman_24
    qq_superman_24
    非常感謝。我知道是遞歸,也能懂你發(fā)的這個階乘問題。但是這個問題還涉及到其他放面我還是沒懂,階乘問題中不斷遞歸得出結(jié)果即可,而這個問題它遞歸它的每一層結(jié)果是怎樣的(比如我輸入數(shù)字15要求轉(zhuǎn)換為2進制),遞歸完后,s數(shù)組中不還是保存了一串空字符嗎,返回后后面的語句為什么會執(zhí)行呢?
  • onemoo
    onemoo
    你真的搞懂了那個階乘的遞歸嗎?我表示懷疑... 好吧,想寫得太多,我另寫了一個回答。 總之,我想繼續(xù)引導(dǎo)你思考,而不是直接給你詳細的解答。
  • 2 回答
  • 0 關(guān)注
  • 1137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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