Chương Trình Tính Giai Thừa (factorial) Trong Java - Góc Học IT
1. Giai thừa (factorial) là gì?
Cho n là một số nguyên dương, giai thừa (factorial) của n là tích của tất cả các số nguyên dương nhỏ hơn hoặc bằng n. Và được gọi là n giai thừa (ký hiệu là n!) với n! = 1 × 2 × 3 × … × n. Ví dụ: 8! = 1 × 2 × 3 × … × 7 × 8 = 40.320.
Lưu ý, với n = 0 thì chúng ta quy ước 0! = 1.
Ngoài ra, chúng ta có thể định nghĩa đệ quy n! như sau:
1. 0! = 1
2. (n + 1)! = n! × (n + 1) với n> 0
Bảng bên dưới cho biết kết quả tính giai thừa của một vài số nguyên dương.n n! n n! 0 1 15 1 307 674 368 000 1 1 20 2 432 902 008 176 640 000 2 2 25 15 511 210 043 × 1025 3 6 50 30 414 093 202 × 1064 4 24 70 11 978 571 670 × 10100 5 120 100 93 326 215 444 × 10157 6 720 171 12 410 180 702 × 10309 7 5 040 450 17 333 687 331 × 101000 8 40 320 1000 40 238 726 008 × 102567 9 362 880 3249 64 123 376 883 × 1010000 10 3 628 800 10000 28 462 596 809 × 1035659
Dễ thấy, giai thừa của các số nguyên dương càng ngày càng lớn. Do đó, nên sử dụng kiểu dữ liệu phù hợp trong Java khi lưu trữ các giá trị này.
2. Tính giai thừa sử dụng vòng lặp (loop) trong Java
Đoạn code bên dưới sử dụng vòng lặp for để tính giai thừa của một số nguyên dương trong Java.package factorial; import java.util.Scanner; public class Factorial { public static void main(String[] args) { int num; System.out.print("Enter the number to calculate the factorial: "); try (Scanner scanner = new Scanner(System.in)) { num = scanner.nextInt(); } long fact = 1; if (num != 0 || num != 1) { for (int i = 2; i <= num; i++) { fact = fact * i; } } System.out.println("Factorial of "+ num + " is " + fact); } }
Có thể thay vòng lặp for bằng vòng lặp while như sau:package factorial; import java.util.Scanner; public class Factorial { public static void main(String[] args) { int num; System.out.print("Enter the number to calculate the factorial: "); try (Scanner scanner = new Scanner(System.in)) { num = scanner.nextInt(); } long fact = 1; if (num != 0 && num != 1) { int i = 2; while(i<=num) { fact = fact * i; i++; } } System.out.println("Factorial of "+ num + " is " + fact); } }
Chúng ta đang sử dụng kiểu dữ liệu long để lưu kết quả giai thừa tính được. Nếu cần tính giai thừa của những số nguyên lớn hơn 20 thì cần sử dụng BigInteger để lưu giá trị giai thừa tính được. Vì kiểu long không thể lưu được những giá trị lớn hơn. Xem phần 4 để rõ hơn về cách sử dụng BigInteger trong tính giai thừa.
3. Tính giai thừa sử dụng đệ quy (recursion) trong Java
Chúng ta có thể định nghĩa đệ quy n! như sau:
1. 0! = 1
2. (n + 1)! = n! × (n + 1) với n> 0
Đoạn code bên dưới sử dụng đệ quy để tính giai thừa của một số nguyên dương trong Java.package factorial; import java.util.Scanner; public class Factorial { public static long factorialUsingRecursion(int n) { if (n == 0 || n == 1) { return 1; } return n * factorialUsingRecursion(n - 1); } public static void main(String[] args) { int num; System.out.print("Enter the number to calculate the factorial: "); try (Scanner scanner = new Scanner(System.in)) { num = scanner.nextInt(); } long fact = Factorial.factorialUsingRecursion(num); System.out.println("Factorial of "+ num + " is " + fact); } }
4. Tính giai thừa cho số lớn hơn 20 trong Java
Kiểu dữ liệu long chỉ được sử dụng để lưu kết quả giai thừa của các số nguyên dương n <= 20. Để lưu giai thừa của các số nguyên dương lớn hơn, chúng ta có thể sử dụng BigInteger của package java.math. BigInteger có thể lưu trữ giá trị lên đến 2^Integer.MAX_VALUE.package factorial; import java.math.BigInteger; import java.util.Scanner; public class Factorial { public static void main(String[] args) { int num; System.out.print("Enter the number to calculate the factorial: "); try (Scanner scanner = new Scanner(System.in)) { num = scanner.nextInt(); } BigInteger fact = BigInteger.ONE; if (num != 0 || num != 1) { for (int i = 2; i <= num; i++) { fact = fact.multiply(BigInteger.valueOf(i)); } } System.out.println("Factorial of "+ num + " is " + fact); } }
Bài này đã trình bày cách sử dụng vòng lặp và đệ quy để tính giai thừa trong Java. Các bạn cần lưu ý sử dụng kiểu dữ liệu long hoặc BigInteger để lưu kết quả giai thừa trong trường hợp n<=20 hoặc n>20.
- Toán tử logic, toán tử trên bit và toán tử gán trong C++
- Lớp Reader và Writer trong Java
- Cài đặt Microsoft Visual Studio để lập trình C++
- Chương trình C++ tính chu vi và diện tích của hình tròn
- Kỹ thuật cấp phát bộ nhớ động và minh họa với C++
Từ khóa » đệ Quy Giai Thừa Trong Java
-
Tính Giai Thừa Trong Java - Bài Tập Java Có Lời Giải - VietTuts
-
Đệ Quy Trong Java - Học Java Cơ Bản đến Nâng Cao - VietTuts
-
Giải Thuật Đệ Quy Trong Java - GP Coder (Lập Trình Java)
-
Java Core - Tính Giai Thừa Trong Java
-
Tính Giai Thừa Trong Java
-
Tính Giai Thừa Trong Java - Code24h
-
Cách Sử Dụng đệ Quy Trong Java - Deft Blog
-
Đệ Quy Trong Java | Lập Trình Từ Đầu
-
Đệ Quy Trong Java (bất Kỳ Ngôn Ngữ Lập Trình Nào) - Team Việt Dev
-
Chương Trình Giai Thừa Trong Java
-
Tính Giai Thừa Dùng Đệ Quy Trong Java - - YouTube
-
Đệ Quy Java - Codefly.Vn
-
Tính Giai Thừa Với Java - Lặp Lại Và đệ Quy
-
Đệ Quy Trong Java - Tìm Hiểu Về đệ Quy Cho Người Mới Bắt đầu
-
Đệ Quy Trong Java: Kỹ Thuật Giải Quyết Vấn đề để Lập Trình - Box-edu
-
Tính Tổng Giai Thừa Bằng Java | Tìm ở đây
-
Tính Giai Thừa Java