首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 遞迴實作:正整數反序輸出完整指南(含圖解邏輯)

     編輯:程式設計綜合問答

經典教學範例:撰寫遞迴函數將任意正整數(如 12345)反序輸出為 54321。本文提供標準 C++ 實作、遞迴邏輯圖解,並說明為何不需字串操作即可完成。

核心程式碼(標準 C++11)

#include <iostream>
using namespace std;

void printReversed(int n) {
    if (n < 10) {                 // 基礎情況:個位數直接輸出
        cout << n;
        return;
    }
    cout << n % 10;              // 先輸出個位數
    printReversed(n / 10);       // 遞迴處理剩餘高位
}

int main() {
    int n = 12345;
    printReversed(n);            // 輸出:54321
    cout << endl;
    return 0;
}

遞迴流程圖解

遞迴呼叫堆疊示意圖

圖中展示 printReversed(12345) 的呼叫堆疊:

  1. 第 1 層:輸出 5,呼叫 printReversed(1234)
  2. 第 2 層:輸出 4,呼叫 printReversed(123)
  3. 第 3 層:輸出 3,呼叫 printReversed(12)
  4. 第 4 層:輸出 2,呼叫 printReversed(1)
  5. 第 5 層(基礎情況):輸出 1,直接返回

隨著堆疊展開,數字順序自然形成 54321。

關鍵觀念釐清

  • 尾端遞迴優化:此處遞迴呼叫在輸出之後,屬於非尾端遞迴,編譯器通常不會優化為迴圈,但資料量極小(int 最大 10 位)無堆疊溢位風險。
  • 負數處理:若需支援負數,可在入口加上 if (n < 0) { cout << '-'; printReversed(-n); }。
  • 避免前導零:整數型別本身不保留前導零,故 1200 反序輸出為 21,符合數學定義。

延伸:改為回傳字串而非直接輸出

string reverseDigits(int n) {
    if (n < 10) return to_string(n);
    return to_string(n % 10) + reverseDigits(n / 10);
}

此版本方便單元測試與後續處理,體現「純函數」設計思維。

掌握「取模輸出個位 + 整除遞迴高位」模式,不僅能解決反序輸出,同樣適用於數位根計算、回文判斷、進位制轉換等經典遞迴題型。

  1. 上一篇文章:
  2. 下一篇文章:
CSS overflow:hidden 與 clear:both 的區別與適用場景 Struts2 `` 與原生 `