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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

進(jìn)制轉(zhuǎn)換函數(shù)沒(méi)有看懂

進(jìn)制轉(zhuǎn)換函數(shù)沒(méi)有看懂

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("請(qǐng)輸入一個(gè)數(shù):\n");?scanf("%d",&num);?printf("請(qǐng)輸入要轉(zhuǎn)換的進(jìn)制\n");?scanf("%d",&base);??? change(s,num,base);?printf("%d轉(zhuǎn)換成%d進(jìn)制為:%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); ? 這個(gè)函數(shù)一直調(diào)用自己,最后n=0了,s中保存的內(nèi)容不就是空的直接返回了嗎?下面的語(yǔ)句不就沒(méi)用了。?len=strlen(s);?s[len]=bit[n%b];?s[len+1]='\0'; }
查看完整描述

2 回答

已采納
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

“階乘問(wèn)題中不斷遞歸得出結(jié)果即可,而這個(gè)問(wèn)題...” 從這句話來(lái)看,你可能也并沒(méi)有真正理解那個(gè)階乘的遞歸過(guò)程。因?yàn)檫@兩個(gè)代碼邏輯都是“遞歸”,并沒(méi)有本質(zhì)的區(qū)別。


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


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

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

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

if 語(yǔ)句后面的語(yǔ)句具體來(lái)說(shuō)有 4 條:

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

len=strlen(s);

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

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

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

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

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


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

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

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

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

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


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

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


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

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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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