Bất kể bạn sử dụng ngôn ngữ lập trình nào, khi bạn bắt đầu viết mã ngày càng nhiều, bạn sẽ học được các khái niệm giúp mã của bạn rõ ràng và dễ đọc/hiểu. Có một số khái niệm như vậy trong C. Một trong số đó là 'hàm đệ quy', mà chúng ta sẽ thảo luận ở đây trong bài viết này.
Hàm đệ quy là hàm gọi chính nó. Có thể gọi trực tiếp từ bên trong thân hàm hoặc gián tiếp từ bên trong một số hàm khác được hàm đang xét gọi.
Sau đây là một ví dụ về đệ quy trực tiếp:
Và đây là một ví dụ về đệ quy gián tiếp:
Như đã đề cập ở phần đầu, đệ quy giúp bạn đạt được mã nhỏ gọn, không chỉ dễ viết mà còn dễ hiểu và dễ xem lại. Chúng ta hãy lấy một ví dụ để làm rõ hơn lợi thế này.
Tôi chắc rằng tất cả các bạn đều đã nghe về khái niệm giai thừa. Đối với những ai chưa biết, giai thừa là kết quả bạn nhận được khi nhân một số nguyên với tất cả các số nguyên dương nhỏ hơn nó. Ví dụ, giai thừa của 5 là 5x4x3x2x1, bằng 120.
Sau đây là một mã đơn giản để tìm giai thừa của một số:
Hàm đệ quy là hàm gọi chính nó. Có thể gọi trực tiếp từ bên trong thân hàm hoặc gián tiếp từ bên trong một số hàm khác được hàm đang xét gọi.
Sau đây là một ví dụ về đệ quy trực tiếp:
Mã:
int func (int a)
{
//statements
func(a-1);
// statements
return 0;
}
Mã:
int func (int a)
{
//statements
func_new(a);
// statements
return 0;
}
int func_new(int b)
{
//statements
func(b-1);
//statementsur
return 0;
}
Tôi chắc rằng tất cả các bạn đều đã nghe về khái niệm giai thừa. Đối với những ai chưa biết, giai thừa là kết quả bạn nhận được khi nhân một số nguyên với tất cả các số nguyên dương nhỏ hơn nó. Ví dụ, giai thừa của 5 là 5x4x3x2x1, bằng 120.
Sau đây là một mã đơn giản để tìm giai thừa của một số:
Mã:
#include
int main()
{
int a = 0, i = 0, fact = 1;
printf("Nhập một số: ");
scanf("%d", &a);
for(i=1; i