"Hàm đệ quy" là hàm tự gọi lại chính nó trong thân hàm.
Ví dụ:
Hàm fact() tính giai thừa của số nguyên 'N', là tích của tất cả số nguyên từ 1 đến N.
fact() với đối số 1 (hoặc 0) trả về 1. Ngược lại trả về n*fact(n-1), quá trình lặp lại cho đến khi n = 1.
Fact(5) = 5 * fact(4) = 5*4*3*fact(3) = 5*4*3*2*fact(2) = 5*4*3*2*1*fact(1) = 5*4*3*2*1 = 120.
Ví dụ
Chương trình C sau dùng hàm đệ quy để đảo ngược số (lưu ý: ví dụ đầu tiên thực tế tính giai thừa, ví dụ thứ hai mới đảo số):
#include <stdio.h>
main() {
int n, f;
int fact(int);
clrscr();
printf("nhap mot so");
scanf("%d", &n);
f = fact(n);
printf("gia tri giai thua = %d", f);
}
int fact(int n) {
int f;
if ((n==1) || (n==0))
return 1;
else
f = n * fact(n-1);
return f;
}
Kết quả
Đầu ra như sau:
Nhap mot so 5 Gia tri giai thua = 120
Chương trình C khác đảo ngược số dùng hàm đệ quy:
#include <stdio.h>
int sum = 0, rem;
int main() {
int num, revNum;
printf("nhap so:\n");
scanf("%d", &num);
revNum = revNumFunction(num); // gọi hàm đảo số
printf("so sau khi dao: %d", revNum);
return 0;
}
revNumFunction(int num) {
if (num) {
rem = num % 10;
sum = sum * 10 + rem;
revNumFunction(num / 10);
} else
return sum;
}
Kết quả
Đầu ra như sau:
nhap so: 1357 so sau khi dao la: 7531