Giai thừa là tích của một dãy số tự nhiên từ 1 cho tới n, vậy làm sao để tính được giai thừa trong lập trình C/C++ cùng blog TUI CÓ CÁCH tìm hiểu trong bài viết này.
Chương trình tính giai thừa trong C/C++
Giai thừa là tích của dãy số tự nhiên liên tiếp từ 1 tới n, nhưng sẽ có 1 trường hợp đặc biệt đó là số 0, với 0! kết quả vẫn sẽ là 1.
Ta có dãy số giai thừa đầu tiên là:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5 != (1*2*3*4*5) = 120
….
Với bài viết này mình sẽ hướng dẫn tính giai thừa trong C/C++ theo 2 cách đó là sử dụng vòng lặp và hàm đệ quy.
Sử dụng vòng lặp
Giả sử, ta có số n cần tính giai thừa….nếu n bằng = 0 ta sẽ kết luận luân n! = 1. Ngược lại nếu n> 0, lúc này ta sẽ khai báo 1 biến factorial khởi tạo giá trị ban đầu = 1(Mọi số nhân với 0 đều = 0 nên ta sẽ gắn giá trị ban đầu là 1 để tránh kết quả cuối cùng sẽ bằng 0). Sau đó ta duyệt vòng lặp i chạy từ 1 cho tới n, mỗi bước lặp ta sẽ nhân dồn i vào factorial(mỗi bước lặp biến factorial sẽ gắn lại giá trị bằng factorial nhân với i). Sau khi thoát khỏi vòng lặp biến factorial chính là kết quả của giai thừa n.
- Kiếm tiền Accesstrade, kiếm tiền tại nhà với Accesstrade.vn – Tiếp thị liên kết
- MegaURL – Rút gọn link kiếm tiền có giá cao tại Việt Nam
- Top 4 App kiếm tiền online trên điện thoại tốt nhất 2022
Ta viết chương trình C tính giai thừa sử dụng vòng lặp for như sau.
#include <stdio.h>
int main()
{
int n = 5; //Hoặc biến n bạn có thể cho nhập từ bàn phím nhé
//Nếu n = 0 thì ta hiển thị kq 1 và thoát khỏi chương trình
if(n == 0){
printf("1");
return 0;
}
//Nếu không sảy ra if chương trình sẽ chạy xuống các lệnh dưới đây đây
int factorial = 1; //Khoi tạo biến với giá trị ban đầu là 1
int i;
//Duyệt vòng lặp để tính giai thừa
for(i = 1; i<=n; i++){
factorial = factorial*i; //Nhân dồn factorial với i
}
printf("%d! = %d", n, factorial); //Hiển thị kết quả ra màn hình
return 0;
}
Sử dụng vòng lặp while, do….while
#include <stdio.h>
int main()
{
int n = 5;
if(n == 0){
printf("1");
return 0;
}
//Tính giai thừa sử dụng vòng lặp while
int factorial = 1;
int i = 1;
while(i<=n){
factorial = factorial*i;
i++;
}
printf("Su dung vong lap while: %d! = %d", n, factorial);
//Tính giai thừa sử dụng vòng lặp do...while
int factorial2 = 1;
int i2 = 1;
do{
factorial2 = factorial2*i2;
i2++;
}while(i2 <= n);
printf("\nSu dung vong lap do...while: %d! = %d", n, factorial2);
}
Nếu bạn vẫn chưa hiểu rõ về sự khác biệt giữa while và do…while thì đọc thêm bài viết này nhé: https://tuicocach.com/vong-lap-for-while-do-while-trong-ngon-ngu-lap-trinh-c-lap-trinh-co-ban/
Bây giờ mình sẽ viết hàm tính giai thừa thành 1 hàm riêng(chỉ với vòng lặp for thôi nhé, while, do….while làm tương tự).
#include <stdio.h>
int tinhGiaiThua(int n){
if(n == 0) return 1;
int factorial = 1;
int i;
for(i = 1; i<=n; i++){
factorial = factorial*i;
}
return factorial;
}
int main()
{
int n = 5;
printf("%d! = %d", n, tinhGiaiThua(n));
}
Chuyển đổi chương trình C thành C++ như sau.
#include <iostream>
using namespace std;
int tinhGiaiThua(int n){
if(n == 0) return 1;
int factorial = 1;
int i;
for(i = 1; i<=n; i++){
factorial = factorial*i;
}
return factorial;
}
int main()
{
int n = 5;
cout<<n<<"! = "<<tinhGiaiThua(n);
}
Sử dụng hàm đệ quy
Nếu với một số bạn mới làm quen với lập trình thì hàm đệ quy có lẽ sẽ tương đối là khó hiểu đấy, nếu chưa biết hay chưa thể hình dung chương trình bên dưới chạy như thế nào thì đọc thêm bài viết này về hàm đệ quy nhé: Tìm hiểu về Hàm đệ quy trong lập trình
Chương trình C tính giai thừa sử dụng hàm đệ quy
#include <stdio.h>
//Hàm tính giai thừa
int giaiThua(int n){
if(n<=1) return 1;//Trường hợp suy biến
return n * giaiThua(n-1); //Gọi lại hàm đệ quy để tính giai thừa n-1
}
int main()
{
printf("Giai thua cua 4 la: %d", giaiThua(4));
}
Chương trình C++ tính giai thừa sử dụng hàm đệ quy
#include <iostream>
using namespace std;
int giaiThua(int n){
if(n<=1) return 1;
return n * giaiThua(n-1);
}
int main()
{
int n = 5;
cout<<n<<"! = "<<giaiThua(n);
}
[Xem tất cả bài viết chủ đề C/C++ tại đây]