0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

遞歸實(shí)現(xiàn)依次打印出數(shù)字中的每一位

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程學(xué)習(xí)基地 ? 2022-05-05 15:17 ? 次閱讀

今天來分析一道非常經(jīng)典的遞歸題目:實(shí)現(xiàn)依次打印出數(shù)字中的每一位。

代碼如下:

#include 
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é)果如下:

62dfacd6-c798-11ec-bce3-dac502259ad0.png

運(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ì)清晰了

62f41a86-c798-11ec-bce3-dac502259ad0.png

起初我的想法是,在進(jìn)行if判斷之后,會(huì)先執(zhí)行下面的printf,即先打印最后一位數(shù)8,再向前打印

實(shí)際上,if語句后的Print函數(shù)的嵌套調(diào)用是在下一行printf之前的、

也就是說它需要像圖中這樣完全調(diào)用完,直到if判斷為假后,才會(huì)從后往前運(yùn)行printf語句

這才有了最開始我貼的結(jié)果

程序依次打印了每一位的數(shù)字

63093f10-c798-11ec-bce3-dac502259ad0.png

如果這篇博客對你有幫助,還請點(diǎn)贊收藏支持一下!萬分感謝!

原文標(biāo)題:C語言習(xí)題:遞歸實(shí)現(xiàn)依次打印出數(shù)字,你學(xué)會(huì)了嗎?

文章出處:【微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4696

    瀏覽量

    68083
  • 遞歸
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    8999

原文標(biāo)題:C語言習(xí)題:遞歸實(shí)現(xiàn)依次打印出數(shù)字,你學(xué)會(huì)了嗎?

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    請問WATHR取值為Pmax電能寄存器的每一位代表多少電能呢?

    請問WATHR取值為Pmax 電能寄存器的 每一位代表多少電能呢?書大佬指教。
    發(fā)表于 12-26 07:55

    周立功can程序解析每個(gè)字節(jié)每一位

    請教,周立功labview例程里,需要什么改動(dòng)或者直接能把某個(gè)字節(jié)里的每一位顯示出來嗎
    發(fā)表于 04-22 17:25

    請問在串口調(diào)試實(shí)驗(yàn)為什么不停的往串口調(diào)試助手里打印出數(shù)字?

    在串口調(diào)試實(shí)驗(yàn)為什么不停的往串口調(diào)試助手里打印出數(shù)字??
    發(fā)表于 02-12 00:27

    我用printf數(shù)據(jù)傳輸?shù)酱诘臄?shù)據(jù)每一位數(shù)上都加了30 例如數(shù)字是01 則串口助手上是31 請問我用LABVIEW程序怎么讀出01呢?

    我用printf數(shù)據(jù)傳輸?shù)酱诘臄?shù)據(jù)每一位數(shù)上都加了30例如數(shù)字是01則串口助手上是31 請問我用LABVIEW程序怎么讀出01呢?我現(xiàn)在是將數(shù)據(jù)每一位都單獨(dú)讀出來 然后在把每一位的數(shù)
    發(fā)表于 11-12 17:01

    如何實(shí)現(xiàn)10位數(shù)字軟件激活碼 截取所有的1%作為有效激活碼

    如何實(shí)現(xiàn)10位數(shù)字軟件激活碼 截取所有的1%作為有效激活碼,嘗試了輸出所有排列,過于復(fù)雜,或者說是不是可以在每一位數(shù)設(shè)置概率呢?求解答。
    發(fā)表于 04-23 15:42

    每一位C/C++程序員的調(diào)試工具 : GDB (GUN Debugger) 相關(guān)資料下載

    每一位C/C++程序員的調(diào)試工具 : GDBgdb 介紹gdb 常用命令gdb調(diào)試命令列表gdb 調(diào)試段錯(cuò)誤gdb 介紹gdb 常用命令gdb調(diào)試命令列表gdb 調(diào)試段錯(cuò)誤...
    發(fā)表于 07-02 07:08

    二進(jìn)制每一位數(shù)可取

    二進(jìn)制每一位數(shù)可取,方法:通過移位運(yùn)算符>>、
    發(fā)表于 07-14 08:16

    如何利用C語言的域操作去實(shí)現(xiàn)對寄存器每一位的控制

    在單片機(jī)的編程,會(huì)使用到些IC里面的寄存器,而有些寄存器并不是每一位都是有效的,例如:這里的1-3則是保留的,不可以***作的。所以在對
    發(fā)表于 02-25 06:41

    Protel在線教程:在PCB如何打印出中空的焊盤

    Protel在線教程:在PCB如何打印出中空的焊盤
    發(fā)表于 04-22 09:05 ?1719次閱讀
    Protel在線教程:在PCB<b class='flag-5'>中</b>如何<b class='flag-5'>打印出</b>中空的焊盤

    數(shù)字匹配濾波器的遞歸折疊實(shí)現(xiàn)

      針對數(shù)字匹配濾波器(DMF)的FPGA實(shí)現(xiàn)提出種優(yōu)化結(jié)構(gòu)。利用16移位寄存器(SRL16E)的存儲(chǔ)潛力,設(shè)計(jì)遞歸延遲線(RDL);再
    發(fā)表于 05-20 14:53 ?5369次閱讀
    <b class='flag-5'>數(shù)字</b>匹配濾波器的<b class='flag-5'>遞歸</b>折疊<b class='flag-5'>實(shí)現(xiàn)</b>

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解
    發(fā)表于 10-16 13:04 ?14次下載
    51寄存器的所有寄存器名稱,(包括寄存器<b class='flag-5'>每一位</b>的作用及用法)資源詳解

    3d打印機(jī)結(jié)構(gòu)_3d打印機(jī)分類

    3D打印機(jī)簡稱(3DP)是一位名為恩里科·迪尼的發(fā)明家設(shè)計(jì)的種神奇的打印機(jī),不僅可以“打印
    的頭像 發(fā)表于 04-28 14:19 ?2.1w次閱讀

    python打印出abcd的所有排列組合

    如何使用Python生成"abcd"的所有排列組合,我們首先需要了解排列和組合的概念。排列是組元素的有序排列,而組合是組元素的無序選擇。 為了打印出"abcd"的所有排列組合,我們可以使用
    的頭像 發(fā)表于 11-29 16:29 ?1201次閱讀

    python數(shù)字排列組合需要縮進(jìn)嗎

    在Python,數(shù)字排列組合的實(shí)現(xiàn)通常需要使用循環(huán)和遞歸來生成所有可能的組合。對于代碼塊的循環(huán)和遞歸
    的頭像 發(fā)表于 11-29 16:40 ?338次閱讀

    matlab怎么取三數(shù)的每一位

    在MATLAB,可以使用些基本的算術(shù)和邏輯運(yùn)算來取得個(gè)三數(shù)的每一位。下面是種基本的方法
    的頭像 發(fā)表于 12-28 14:44 ?1982次閱讀