首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言遞歸實現 DigitSum:1729 → 19 完整演示

     編輯:關於C語言

C語言遞歸實現 DigitSum:1729 → 19 完整演示

輸入 1729,遞歸計算各位數字之和:1+7+2+9=19。展示遞歸函數設計、調用棧變化、代碼實現。

遞歸函數設計

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int DigitSum(unsigned int num) {
    int sum = 0;
    if (num != 0) {
        int n = num % 10;      // 取個位
        num = num / 10;        // 去個位
        sum = n + DigitSum(num);  // 遞歸累加
    }
    return sum;
}

int main() {
    unsigned int num = 1729;
    printf("DigitSum(%u) = %d\n", num, DigitSum(num));
    system("pause");
    return 0;
}

遞歸調用棧演示 (1729)

DigitSum(1729)
  ├─ n = 9, num = 172
  ├─ DigitSum(172)
  │   ├─ n = 2, num = 17
  │   ├─ DigitSum(17)
  │   │   ├─ n = 7, num = 1
  │   │   ├─ DigitSum(1)
  │   │   │   ├─ n = 1, num = 0
  │   │   │   ├─ DigitSum(0) → return 0
  │   │   │   └─ return 1 + 0 = 1
  │   │   └─ return 7 + 1 = 8
  │   └─ return 2 + 8 = 10
  └─ return 9 + 10 = 19

關鍵點解析

  • 參數用 unsigned int 避免負數併發
  • 基線條件 num == 0 返回 0
  • 每層只做「取模 + 除 10 + 遞歸」三步
  • 棧深度 = 數字位數(最多 10 位,極安全)

迭代版對比

int DigitSum_iter(unsigned int num) {
    int sum = 0;
    while (num) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

迭代版無棧開銷,生產代碼首選;遞歸版教學價值高。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved