Đề bài
Viết chương trình C tính giai thừa của một số nguyên dương.
Định nghĩa giai thừa: giai thừa của 1 số là tích các số liên tiếp từ 1 đến số đó. Trường hợp đặc biệt, giai thừa của 0 và 1 là 1.
Ví dụ: giai thừa của 5 là 1*2*3*4*5 = 120
Lời giải
Có 2 cách để viết chương trình tính giai thừa trong C:
- Tính giai thừa không sử dụng đệ quy.
- Tính giai thừ có sử dụng đệ quy.
Tính giai thừa không sử dụng đệ quy
Ví dụ chương trình tính giai thừa trong C không sử dụng phương pháp đệ quy:
/** * Tinh giai thua KHONG dung phuong phap de quy * * @author viettuts.vn */ #include<stdio.h> /** * tinh giai thua * * @author viettuts.vn * @param n: so nguyen duong * @return giai thua cua so n */ long tinhGiaithua(int n) { int i; long giai_thua = 1; if (n == 0 || n == 1) { return giai_thua; } else { for (i = 2; i <= n; i++) { giai_thua *= i; } return giai_thua; } } /** * Ham main */ int main() { int a = 5; int b = 0; int c = 10; printf("Giai thua cua %d la: %d \n", a, tinhGiaithua(a)); printf("Giai thua cua %d la: %d \n", b, tinhGiaithua(b)); printf("Giai thua cua %d la: %d", c, tinhGiaithua(c)); }
Kết quả:
Giai thua cua 5 la: 120 Giai thua cua 0 la: 1 Giai thua cua 10 la: 3628800
Tính giai thừa có sử dụng đệ quy
Ví dụ chương trình tính giai thừa trong C có sử dụng phương pháp đệ quy:
/** * Tinh giai thua su dung phuong phap de quy * * @author viettuts.vn */ #include<stdio.h> /** * tinh giai thua * * @author viettuts.vn * @param n: so nguyen duong * @return giai thua cua so n */ long tinhGiaithua(int n) { if (n > 0) { return n * tinhGiaithua(n - 1); } else { return 1; } } /** * Ham main */ int main() { int a = 5; int b = 0; int c = 10; printf("Giai thua cua %d la: %d \n", a, tinhGiaithua(a)); printf("Giai thua cua %d la: %d \n", b, tinhGiaithua(b)); printf("Giai thua cua %d la: %d", c, tinhGiaithua(c)); }
Kết quả:
Giai thua cua 5 la: 120 Giai thua cua 0 la: 1 Giai thua cua 10 la: 3628800