Đệ quy là một kỹ thuật lập trình trong đó một hàm gọi lại chính nó trực tiếp hoặc gián tiếp. Trong C#, đệ quy thường được sử dụng để giải quyết các bài toán có cấu trúc lặp lại hoặc phân nhánh tự nhiên, chẳng hạn như tính toán giai thừa, dãy Fibonacci, hoặc duyệt cây.
Cấu Trúc Của Hàm Đệ Quy
Một hàm đệ quy bao gồm hai phần chính:
- Điều kiện cơ sở (base case): Điều kiện này kết thúc đệ quy để tránh lặp vô hạn.
- Lời gọi đệ quy (recursive call): Gọi lại chính hàm đó với một phiên bản nhỏ hơn hoặc đơn giản hơn của bài toán ban đầu.
Ví Dụ 1: Tính Giai Thừa
Giai thừa của một số nguyên dương n
(ký hiệu là n!
) được định nghĩa là tích của tất cả các số nguyên từ 1 đến n
. Công thức đệ quy cho giai thừa là:
0! = 1
(điều kiện cơ sở)n! = n * (n - 1)!
(lời gọi đệ quy)
Mã C#:
using System;
class Program
{
static void Main()
{
int number = 5;
int result = Factorial(number);
Console.WriteLine($"{number}! = {result}");
}
static int Factorial(int n)
{
if (n == 0) // Điều kiện cơ sở
return 1;
else
return n * Factorial(n - 1); // Lời gọi đệ quy
}
}
Ví Dụ 2: Dãy Fibonacci
Dãy Fibonacci được định nghĩa như sau:
F(0) = 0
(điều kiện cơ sở)F(1) = 1
(điều kiện cơ sở)F(n) = F(n - 1) + F(n - 2)
(lời gọi đệ quy)
Mã C#:
using System;
class Program
{
static void Main()
{
int number = 10;
for (int i = 0; i <= number; i++)
{
Console.WriteLine($"F({i}) = {Fibonacci(i)}");
}
}
static int Fibonacci(int n)
{
if (n == 0) // Điều kiện cơ sở
return 0;
else if (n == 1) // Điều kiện cơ sở
return 1;
else
return Fibonacci(n - 1) + Fibonacci(n - 2); // Lời gọi đệ quy
}
}
Ưu Điểm và Nhược Điểm của Đệ Quy
Ưu Điểm:
- Giải quyết một số bài toán phức tạp theo cách đơn giản và thanh lịch.
- Mã nguồn rõ ràng và dễ hiểu hơn đối với một số bài toán.
Nhược Điểm:
- Có thể gây ra lặp vô hạn và stack overflow nếu không xử lý đúng điều kiện cơ sở.
- Đối với các bài toán lớn, đệ quy có thể không hiệu quả về mặt hiệu năng do nhiều lời gọi hàm lồng nhau và chi phí bộ nhớ.
Kết Luận
Đệ quy là một kỹ thuật lập trình mạnh mẽ trong C# và nhiều ngôn ngữ lập trình khác. Khi sử dụng đệ quy, việc xác định điều kiện cơ sở và đảm bảo lời gọi đệ quy tiến tới điều kiện cơ sở là rất quan trọng để tránh lặp vô hạn và lỗi tràn ngăn xếp.
Comments