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

C 語言遞歸實戰:計算「緣分值」——數字根與年齡數字和的綜合應用

     編輯:程式設計疑難解答

題目邏輯還原

  1. 輸入兩個年齡 a, b(以逗號分隔)。
  2. 定義函數 GetFate(age):計算年齡各位數字之和,若結果 ≥ 10 則遞歸計算,直到得到個位數(即**數字根**)。
  3. 分別對 a, b 調用 GetFate 得到 fa, fb。
  4. 定義函數 Add(x, y) 返回 x+y。
  5. 計算 sum = Add(fa, fb)。
  6. 再次調用 GetFate(sum) 得到最終緣分值。
  7. 輸出結果。

完整可運行代碼

#include <stdio.h>

// 計算數字根(遞歸版)
int GetFate(int age) {
    int sum = 0;
    while (age > 0) {
        sum += age % 10;
        age /= 10;
    }
    if (sum >= 10) return GetFate(sum); // 遞歸直到個位數
    return sum;
}

// 簡單加法
int Add(int a, int b) { return a + b; }

int main() {
    int a, b;
    printf("請輸入兩個年齡(逗號分隔):");
    scanf("%d,%d", &a, &b);

    a = GetFate(a);
    b = GetFate(b);
    int sum = Add(a, b);
    int fate = GetFate(sum);

    printf("您和她的緣分是:%d\n", fate);
    return 0;
}

關鍵知識點

  • 數字根公式:dr(n) = 1 + (n-1) % 9(n>0),可替代遞歸實現 O(1) 計算。
  • 遞歸終止條件:sum < 10 時返回,防止無限遞歸棧溢出。
  • scanf 格式:"%d,%d" 匹配逗號分隔,輸入時必須帶逗號(如 25,30)。

測試用例

輸入過程輸出
25,302+5=7, 3+0=3 → 7+3=10 → 1+0=1緣分是:1
19,281+9=10→1, 2+8=10→1 → 1+1=2緣分是:2
99,999+9=18→9, 9+9=18→9 → 9+9=18→9緣分是:9

題目圖片

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