輸入 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;
}
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 返回 0int DigitSum_iter(unsigned int num) {
int sum = 0;
while (num) {
sum += num % 10;
num /= 10;
}
return sum;
}
迭代版無棧開銷,生產代碼首選;遞歸版教學價值高。