Math factorial python là gì

Vì lý do hiệu suất, vui lòng không sử dụng đệ quy. Nó sẽ là thảm họa.

def fact(n, total=1):
    while True:
        if n == 1:
            return total
        n, total = n - 1, total * n

Kiểm tra kết quả chạy

cProfile.run('fact(126000)')

4 function calls in 5.164 seconds

Sử dụng ngăn xếp rất tiện lợi (giống như cuộc gọi đệ quy), nhưng nó phải trả giá: lưu trữ thông tin chi tiết có thể chiếm nhiều bộ nhớ.

Nếu ngăn xếp cao, có nghĩa là máy tính lưu trữ nhiều thông tin về các lệnh gọi hàm.

Phương thức chỉ chiếm bộ nhớ không đổi (như lặp).

Hoặc sử dụng vòng lặp for

def fact(n):
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result

Kiểm tra kết quả chạy

cProfile.run('fact(126000)')

4 function calls in 4.708 seconds

Hoặc sử dụng toán học hàm dựng sẵn

def fact(n):
    return math.factorial(n)

Kiểm tra kết quả chạy

cProfile.run('fact(126000)')

5 function calls in 0.272 seconds

4 hữu ích 1 bình luận chia sẻ

Hàm factorial() trong Python

Nội Dung

  • 1. Cú pháp sử dụng hàm math.factorial() trong Python
  • 2. Ví dụ hàm math.factorial() trong Python

1. Cú pháp sử dụng hàm math.factorial() trong Python

Hàm math.factorial() trong Python được sử dụng để tính giai thừa của một số đầu vào. Giai thừa của một số n (ký hiệu là n!) được tính theo công thức n! =  n * (n-1) * (n-2) * … * 2 * 1. Quy ước 0! = 11! = 1. Cú pháp của hàm math.factorial() như sau:

math.factorial(x)

Tham số:

  • x là số nguyên dương cần tính giai thừa
Giá trị trả về: Một kiểu giá trị int là kết quả của phép tính giai thừa.
Phiên bản Python: 2.6

Lưu ý: Hàm math.factorial(x) chỉ chấp nhận việc tính giai thừa cho một số nguyên dương!

2. Ví dụ hàm math.factorial() trong Python

Ví dụ dưới đây, sử dụng hàm math.factorial() để tính giai thừa của các số nguyên dương được chỉ định vào trong hàm  và trả về kết quả là số nguyên như sau:

import math  

print(math.factorial(5))
print(math.factorial(6))
print(math.factorial(4))

Kết quả:

120
720
24

Ví dụ tiếp theo, nhập vào hàm math.factorial() một kiểu giá trị là số thực hoặc một số âm khi đó hàm sẽ gây ra lỗi chương trình như sau:

import math  

print(math.factorial(-10))
print(math.factorial(6.8))
print(math.factorial(4))

Kết quả:

Traceback (most recent call last):
  File "./prog.py", line 3, in 
ValueError: factorial() not defined for negative values

Trong Python, một số phép toán toán học có thể được thực hiện một cách dễ dàng bằng cách import một mô-đun có tên là "math" để xác định các hàm khác nhau giúp nhiệm vụ của chúng ta dễ dàng hơn.

1. ceil()

Hàm này trả về giá trị là số nguyên nhỏ nhất (cận trên) lớn hơn số hiện thời. Nếu số đã là số nguyên, thì sẽ trả về chính số đó.

Ví dụ:

# import thư viện math
import math

a = 4.3

# lấy cận trên (ceil) của a
print("Cận trên của", a, "là: ", end="")
print(math.ceil(a))

Kết quả:

Cận trên của 4.3 là: 5

2. floor()

Hàm này trả về giá trị lớn nhất (cận dưới) nhỏ hơn số hiện thời. Nếu số đã là số nguyên, thì sẽ trả về chính số đó.

Ví dụ:

# import thư viện math
import math

a = 4.3

# lấy cần dưới (floor) của a
print("Cận dưới của",a,"là: ", end="")
print(math.floor(a))

Kết quả:

Cận dưới của 4.3 là: 4

3. fabs()

Hàm này trả về giá trị tuyệt đối của một số.

Ví dụ:

import math

a = -10

# trả về trị tuyệt đối của a. 
print("Trị tuyệt đối của", a, "là: ", end="")
print(math.fabs(a))

Kết quả:

Trị tuyệt đối của -10 là: 10.0

4. Giai thừa()

Hàm này trả về giai thừa của một số. Một thông báo lỗi được hiển thị nếu số không phải là số >=0.

Ví dụ:

import math

a = 5

# trả về giai thừa của a
print("Giai thừa của", a, "là: ", end="")
print(math.factorial(a))

Kết quả:

Giai thừa của 5 là: 120

5. copysign(a, b)

Hàm này trả về số có giá trị là 'a' nhưng có dấu là 'b'. Giá trị trả về là kiểu float.

Ví dụ:

import math

a = -10
b = 5.5

print("Sao chép giá trị của",a,"và",b,"là: ", end="")
print(math.copysign(5.5, -10))

Kết quả:

Sao chép giá trị của -10 và 5.5 là: -5.5

6. gcd()

Hàm này được sử dụng để tính ước số chung lớn nhất của 2 số được đề cập trong các đối số của nó. Hàm này hoạt động trong Python từ bản 3.5 trở lên.

Ví dụ:

import math

c = 15
d = 5

print("Ước số chung lớn nhất của", c, "và", d, "là: ", end="")
print(math.gcd(5, 15))

Kết quả:

Ước số chung lớn nhất của 15 và 5 là: 5

7. exp(a)

Hàm này trả về giá trị của e lũy thừa a (e**a).

Ví dụ:

import math

a = 4

print(math.e,"lũy thừa",a, "= ", end="")
print(math.exp(4))

Kết quả:

2.718281828459045 lũy thừa 4 = 54.598150033144236

8. log(a, b)

Hàm này trả về giá trị logarit của a với cơ số b. Nếu không có tham số b thì cơ số là e.

Ví dụ:

import math

a = 8
b = 2

print("Logarit cơ số", b, "của", a, "là: ", end="")
print(math.log(a, b))
print('-------------------------')
print("Logarit cơ số", b, "của", math.e, "là: ", end="")
print(math.log(a, math.e))

Kết quả:

Logarit cơ số 2 của 8 là: 3.0
-------------------------
Logarit cơ số 2 của 2.718281828459045 là: 2.0794415416798357

9. log2(a)

Hàm này tính giá trị của logarit cơ số 2 của a. Giá trị trả về của hàm này sẽ chính xác hơn giá trị trả về của hàm log(a, b).

Ví dụ:

import math

a = 8

print("Logarit cơ số 2", "của", a, "là: ", end="")
print(math.log2(a))

Kết quả:

Logarit cơ số 2 của 8 là: 3.0

10. log10(a)

Hàm này tính giá trị của logarit cơ số 10 của a. Giá trị trả về của hàm này chính xác hơn giá trị trả về của hàm log(a, b).

Ví dụ:

import math

a = 100

print("Logarit cơ số 10", "của", a, "là: ", end="")
print(math.log10(a))

Kết quả:

Logarit cơ số 10 của 100 là: 2.0

11. pow(a, b)

Hàm này được sử dụng để tính giá trị của a lũy thừa b (a**b).

Ví dụ:

import math

a = 2
b = 3

print(a, "lũy thừa", b, "= ", end="")
print(math.pow(a, b))

Kết quả:

2 lũy thừa 3 = 8.0

12. sqrt(a)

Hàm này trả về căn bậc hai của a.

Ví dụ:

import math

a = 9

print("Căn bậc 2 của", a, "= ", end="")
print(math.sqrt(a))

Kết quả:

Căn bậc 2 của 9 = 3.0

13. sin()

Hàm này trả về giá trị sin được truyền dưới dạng đối số. Giá trị được truyền trong hàm này phải tính bằng radian.

Ví dụ:

import math

print("Sine của pi/6 là: ", end="")
print(math.sin(math.pi / 6))

Kết quả:

Sine của pi/6 là: 0.49999999999999994

14. cos()

Hàm này trả về giá trị cos được truyền dưới dạng đối số. Giá trị được truyền trong hàm này phải tính bằng radian.

Ví dụ:

import math

print("Cos của pi/6 là: ", end="")
print(math.cos(math.pi / 6))

Kết quả:

Cos của pi/6 là: 0.8660254037844387

15. tan()

Hàm này trả về giá trị tang được truyền dưới dạng đối số. Giá trị được truyền trong hàm này phải tính bằng radian.

Ví dụ:

import math

angle = math.pi / 4

print("Tang của pi/4 là: ", end="")
print(math.tan(angle))

Kết quả:

Tang của pi/4 là: 0.9999999999999999

16. hypot(a, b)

Hàm này trả về cạnh huyền của các giá trị được truyền trong các đối số. Về mặt số, nó trả về giá trị của sqrt (a*a + b*b).

Ví dụ:

import math

a = 3
b = 4

print("Cạnh huyền của", a, "và", b, "là: ", end="")
print(math.hypot(a, b))

Kết quả:

Cạnh huyền của 3 và 4 là: 5.0

17. degree()

Hàm này dùng để chuyển đổi giá trị đối số từ radian sang độ.

Ví dụ:

import math

a = math.pi / 6
b = 30

print("Chuyển từ radian sang độ: ", end="")
print(math.degrees(a))

Kết quả:

Chuyển từ radian sang độ: 29.999999999999996

18. radian()

Hàm này dùng để chuyển đổi giá trị đối số từ độ sang radian.

Ví dụ:

import math

a = 30

print("Chuyển từ độ sang radian: ", end="")
print(math.radians(a))

Kết quả:

Chuyển từ độ sang radian: 0.5235987755982988

19. gamma()

Hàm này dùng để trả về hàm gamma của đối số.

Ví dụ:

import math

a = 4

print("gamma() của 4 là: ", end="")
print(math.gamma(a))

Kết quả:

gamma() của 4 là: 6.0

20. pi:

Đây là một hằng số có sẵn cho ra giá trị của số PI (3.141592).

Ví dụ:

import math

print("Giá trị của hằng số PI là: ", end="")
print(math.pi)

Kết quả:

Giá trị của hằng số PI là: 3.141592653589793

21. e:

Đây là một hằng số có sẵn cho ra giá trị của số kỹ thuật e (2.718281).

Ví dụ:

import math

print("Giá trị của hằng số E là: ", end="")
print(math.e)

Kết quả:

Giá trị của hằng số E là: 2.718281828459045

22. inf và isinf():

inf là một hằng số vô cực dấu phẩy động dương.

-inf được sử dụng để biểu thị dấu chấm động âm vô cùng. Hằng số này được định nghĩa trong Python 3.5 trở lên.

isinf() là hàm này dùng để kiểm tra giá trị có phải là vô cực hay không.

Ví dụ:

import math

# kiểm tra xem số có phải là dương vô cực không
if (math.isinf(math.inf)):
  print("Số là dương vô cực")
else:
  print("Số không phải là dương vô cực")

Kết quả:

Số là dương vô cực

24. nan và isnan():

nan là hằng biểu thị "không phải là số - not a number" trong Python. Hằng số này được định nghĩa trong Python 3.5 trở lên.

isnan() là hàm trả về True nếu số là "nan", ngược lại trả về False.

Ví dụ:

import math

# kiểm tra xem số có phải là nan không
if math.isinf(math.inf):
  print("Số là nan")
else:
  print("Số không phải là nan")

Kết quả:

Số là nan

25. round():

Hàm này dùng để làm tròn.

Ví dụ:

a = round(1.234, 2)
print(a) #sẽ in ra: 1.23