Để gọi phương thức C# một cách đệ quy, bạn có thể chạy mã sau. Ví dụ tính giai thừa (factorial) của một số bằng hàm đệ quy Display().
Logic đệ quy
- Cơ sở:
n == 1trả về 1 - Đệ quy:
n * Display(n - 1)
Ví dụ 5! = 5 × 4 × 3 × 2 × 1 = 120
Ví dụ
using System;
namespace MyApplication
{
class Factorial
{
public int Display(int n)
{
if (n == 1)
return 1;
else
return n * Display(n - 1);
}
static void Main(string[] args)
{
int value = 5;
int ret;
Factorial fact = new Factorial();
ret = fact.Display(value);
Console.WriteLine("Giá trị: {0}", ret);
Console.ReadLine();
}
}
}
Kết quả
Giá trị: 120
Giải thích quy trình
Display(5) = 5 * Display(4) Display(4) = 4 * Display(3) Display(3) = 3 * Display(2) Display(2) = 2 * Display(1) Display(1) = 1 (base case) Kết quả: 5 * 4 * 3 * 2 * 1 = 120
Lưu ý quan trọng
- Base case (trường hợp cơ sở) bắt buộc để tránh stack overflow
- Mỗi lời gọi đệ quy tốn bộ nhớ stack
- Đệ quy sâu có thể gây
StackOverflowException - Cân nhắc dùng vòng lặp (iterative) cho bài toán đơn giản
Phiên bản không đệ quy (Iterative)
public int FactorialIterative(int n)
{
int result = 1;
for (int i = 2; i <= n; i++)
result *= i;
return result;
}