Đề 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /** * 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /** * 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