今天來分析一道非常經(jīng)典的遞歸題目:實(shí)現(xiàn)依次打印出數(shù)字中的每一位。
代碼如下:
void Print(int n)
{
if (n > 9)
Print(n / 10);
printf("%d ", n % 10);
}
int main()
{
int num = 0;
scanf("%d", &num);
Print(num);
return 0;
}
結(jié)果如下:
運(yùn)行順序
談到遞歸的時(shí)候,最重要的就是要弄明白它究竟是怎么運(yùn)行的
下面的方法非常直觀的表示了它的運(yùn)算順序
這里我用粘貼代碼塊的方式來展示
剛開始執(zhí)行的是scanf輸入,這里不再贅述
void Print(int n)
{
if (n > 9)
Print(n / 10);
printf("%d ", n % 10);
}
這一塊是我們遞歸的主體
void Print(int n)
{
if (n > 9)
Print(3578 / 10);
if (n > 9)
Print(357 / 10);
printf("%d ", 357 % 10);//7
if (n > 9)
Print(35 / 10);
printf("%d ", 35 % 10);//5
if (n > 9)//這時(shí)候值為3,已經(jīng)不滿足條件
Print(3 / 10);//該語句不執(zhí)行
printf("%d ", 3 % 10);//3
printf("%d ", 3578 % 10);//8
}
看起來可能有點(diǎn)亂,在這基礎(chǔ)上加上一些箭頭就會(huì)清晰了
起初我的想法是,在進(jìn)行if判斷之后,會(huì)先執(zhí)行下面的printf,即先打印最后一位數(shù)8,再向前打印
實(shí)際上,if語句后的Print函數(shù)的嵌套調(diào)用是在下一行printf之前的、
也就是說它需要像圖中這樣完全調(diào)用完,直到if判斷為假后,才會(huì)從后往前運(yùn)行printf語句
這才有了最開始我貼的結(jié)果
程序依次打印了每一位的數(shù)字
如果這篇博客對你有幫助,還請點(diǎn)贊收藏支持一下!萬分感謝!
-
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68625 -
遞歸
+關(guān)注
關(guān)注
0文章
28瀏覽量
9021
原文標(biāo)題:C語言習(xí)題:遞歸實(shí)現(xiàn)依次打印出數(shù)字,你學(xué)會(huì)了嗎?
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論