Bài viết share thuật toán cùng cách tính n giai thừa trong C/C+ sử dụng hai phương pháp đệ quy cùng khử đệ quy. Một việc hay dành cho các bạn học lập trình.

Bạn đang xem: Giai thừa trong c


1. Trình làng bài toán

Giai thừa là một bài toán kinh điển trong lập trình, nó là một trong những bài toán nhưng mà mình tin là bất cứ bạn nào bắt đầu học đều phải trải qua. Việc này sẽ giúp bạn gọi được thuật toán đệ quy hoặc thực hiện thành nhuần nhuyễn vòng lặp.

Đề bài xích đại loại hoàn toàn có thể tóm tắt lại như sau: Tính n giai thừa cùng in tác dụng ra màn hình, n nhập vào từ bỏ bàn phím.

Trước khi giải quyết bài toán, chúng ta cần hiểu có mang về n! (n là một trong những nguyên dương): n giai thừa là tích của n số nguyên dương đầu tiên.Công thức tổng quát: n! = n*(n-1)!Trường hợp quánh biệt: 0! = 1


*
Công thức tính giai thừa

2. Tính giai thừa áp dụng vòng lặp

Cách tính thứ nhất này sẽ dễ dàng và đơn giản hơn cách thực hiện đệ quy. Cùng nó được hotline là bí quyết khử đệ quy chính vì nó tránh được việc buộc phải dùng mang đến đệ quy. Tùy từng trường hợp nhưng mà đệ quy và khử đệ quy có ưu điểm khác nhau.

Tư tưởng giải quyết:

Khai báo một biến hóa để lưu quý giá và gán nó bởi 1: giai_thua = 1 thực hiện vòng lặp chạy i từ là 1 đến n tiếp đến gán: giai_thua = giai_thua*i

Code C/C++:

// giai thất bại su dung vong lapint giaithualap(int n){int giai_thua = 1; for (int i = 1; i

3. Tính giai thừa thực hiện đệ quy

Để nắm rõ hơn thuật toán này trước tiên bạn nên tò mò thuật toán đệ quy.

Xem thêm: Soạn Bài Văn Tế Nghĩa Sĩ Cần Giuộc Phần 1, Soạn Bài Văn Tế Nghĩa Sĩ Cần Giuộc

Ở bài này, ta tất cả công thức bao quát n giai thừa là : n!=n*(n-1)!Chính vị thế, ta cũng áp dụng lệnh truy tìm hồi dựa trên công thức này. Điều kiện dừng ở đây là khi n =1 (vì ta tính tích các số bắt đầu từ 1)

Code C/C++:

// tinh giai thua kém su dung de quyint factorial(int n)if(n==1)return 1;return(n*factorial(n-1));Đánh giá thành 2 cách: Cách sử dụng đệ quy để tính giai thừa có vẻ bài bản hơn. Mặc dù cách áp dụng vòng lặp có vận tốc nhanh không thua kém đệ quy, thậm trí là nhanh hơn.Trong cách việc thực tế, giả dụ để gạn lọc thì các lập trình viên sẽ áp dụng cách 1 để hạn chế ít nhất việc thực hiện đệ quy.

Chú ý: Ở đây kiểu dữ liệu của hàm mình để là kiểu int, cũng chính vì thế chỉ rất có thể chạy lúc n using namespace std;// n! su dung de quyint factorial(int n)if(n==1)return 1;return(n*factorial(n-1));// nn! quần thể de quy su dung vong lapint giaithualap(int n){int giai_thua = 1; for (int i = 1; i >n;coutKết quả chạy chương trình:


*