Đệ quy là kỹ thuật một hàm tự gọi chính nó để giải quyết bài toán con nhỏ hơn. Chương trình dưới đây tính tổng các chữ số của một số nguyên dương bằng đệ quy.
Ý tưởng thuật toán
- Lấy chữ số cuối cùng:
n % 10 - Loại bỏ chữ số cuối:
n / 10 - Đệ quy cho đến khi
n == 0
Mã nguồn
using System;
namespace Demo {
class MyApplication {
static void Main(string[] args) {
int val = 789;
Calc cal = new Calc();
Console.WriteLine("Số: {0}", val);
int result = cal.addFunc(val);
Console.WriteLine("Tổng chữ số của {0} = {1}", val, result);
Console.ReadLine();
}
}
class Calc {
public int addFunc(int val) {
if (val != 0) {
return (val % 10 + addFunc(val / 10));
} else {
return 0;
}
}
}
}
Kết quả
Số: 789
Tổng chữ số của 789 = 24
Giải thích luồng thực thi (val = 789)
addFunc(789): 789 % 10 = 9 +addFunc(78)addFunc(78): 78 % 10 = 8 +addFunc(7)addFunc(7): 7 % 10 = 7 +addFunc(0)addFunc(0): trả về 0 (điều kiện dừng)- Kết quả: 9 + 8 + 7 + 0 = 24
Lưu ý
- Đệ quy tốn bộ nhớ stack — cẩn thận với số quá lớn (có thể gây StackOverflow).
- Có thể viết lặp (iterative) hiệu quả hơn:
while (n > 0) { sum += n % 10; n /= 10; }