今天來分析一道非常經典的遞歸題目:實現依次打印出數字中的每一位。
代碼如下:
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;
}
結果如下:
運行順序
談到遞歸的時候,最重要的就是要弄明白它究竟是怎么運行的
下面的方法非常直觀的表示了它的運算順序
這里我用粘貼代碼塊的方式來展示
剛開始執行的是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)//這時候值為3,已經不滿足條件
Print(3 / 10);//該語句不執行
printf("%d ", 3 % 10);//3
printf("%d ", 3578 % 10);//8
}
看起來可能有點亂,在這基礎上加上一些箭頭就會清晰了
起初我的想法是,在進行if判斷之后,會先執行下面的printf,即先打印最后一位數8,再向前打印
實際上,if語句后的Print函數的嵌套調用是在下一行printf之前的、
也就是說它需要像圖中這樣完全調用完,直到if判斷為假后,才會從后往前運行printf語句
這才有了最開始我貼的結果
程序依次打印了每一位的數字
如果這篇博客對你有幫助,還請點贊收藏支持一下!萬分感謝!
-
代碼
+關注
關注
30文章
4823瀏覽量
68904 -
遞歸
+關注
關注
0文章
29瀏覽量
9047
原文標題:C語言習題:遞歸實現依次打印出數字,你學會了嗎?
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論