Trong bài viết này, chúng tôi sẽ xem xét cách chúng ta có thể tính toán giai thừa Python bằng cách sử dụng các phương pháp khác nhau. Hàm Folter Python Chức năng giai thừa Python
factorial[n]
được xác định cho toàn bộ số n
. Điều này tính toán sản phẩm của tất cả các điều khoản từ n
đến 1
. import math
def factorial[x]:
return math.factorial[x]
print[factorial[5]]
0 được coi là 1
.
Vì vậy, chức năng là:
factorial[n] = n * [n-1] * [n-2] * ... * 1, n >= 1 factorial[n] = 1, n = 0
Do đó, giai thừa [4] = 4 * 3 * 2 * 1 = 24.factorial[4] = 4 * 3 * 2 * 1 = 24.
Hãy để phân tích cách chúng ta có thể viết chức năng toán học này trong Python.
Sử dụng math.factorial []
Chúng tôi có thể trực tiếp sử dụng chức năng giai thừa của mô -đun
import math def factorial[x]: return math.factorial[x] print[factorial[5]]2 để thực hiện công việc để sử dụng:
import math def factorial[x]: return math.factorial[x] print[factorial[5]]
Đầu ra
Chúng tôi cũng sẽ xem xét việc tìm thấy chức năng này bằng các phương pháp khác: Hãy để sử dụng một quy trình lặp ngay bây giờ.
Sử dụng một thủ tục lặp
Chúng ta có thể trực tiếp lặp qua tất cả các số cho 1 đến N và nhân trực tiếp nhân sản phẩm.
def factorial[n]: if n == 0: return 1 prod = 1 for i in range[1, n+1]: prod = prod * i return prod if __name__ == '__main__': print[factorial[4]] print[factorial[7]]
Đầu ra
Chúng tôi cũng sẽ xem xét việc tìm thấy chức năng này bằng các phương pháp khác: Hãy để sử dụng một quy trình lặp ngay bây giờ.
Sử dụng một thủ tục lặp
Chúng ta có thể trực tiếp lặp qua tất cả các số cho 1 đến N và nhân trực tiếp nhân sản phẩm.recursion, to compute this function. Basically, we reduce this function into a smaller sub-problem. After we compute the sub-problems, we can combine the results to give the final answer.
Bây giờ, hãy xem xét bằng cách sử dụng một phương pháp đệ quy cho chức năng giai thừa Python.
factorial[n] = n * factorial[n-1], n >= 1 factorial[0] = 1, n = 0
Sử dụng một thủ tục đệ quy
Chúng ta có thể sử dụng đệ quy, để tính toán chức năng này. Về cơ bản, chúng tôi giảm chức năng này thành một vấn đề phụ nhỏ hơn. Sau khi chúng tôi tính toán các vấn đề phụ, chúng tôi có thể kết hợp các kết quả để đưa ra câu trả lời cuối cùng.
def factorial[n]: if n == 0: # Base case n = 0 return 1 else: # Use the definition of factorial function return n * factorial[n-1] if __name__ == '__main__': print[factorial[4]] print[factorial[7]]
Đầu ra
Chúng tôi cũng sẽ xem xét việc tìm thấy chức năng này bằng các phương pháp khác: Hãy để sử dụng một quy trình lặp ngay bây giờ.
Sử dụng một thủ tục lặpcall stack, which continuously stores the state of the program, until the base case is reached. The stack elements are finally popped out one by one after a value is returned by the corresponding block, when the recursion unwinds from
import math def factorial[x]: return math.factorial[x] print[factorial[5]]3.
Chúng ta có thể trực tiếp lặp qua tất cả các số cho 1 đến N và nhân trực tiếp nhân sản phẩm.
Bây giờ, hãy xem xét bằng cách sử dụng một phương pháp đệ quy cho chức năng giai thừa Python.
Chúng ta có thể sử dụng đệ quy, để tính toán chức năng này. Về cơ bản, chúng tôi giảm chức năng này thành một vấn đề phụ nhỏ hơn. Sau khi chúng tôi tính toán các vấn đề phụ, chúng tôi có thể kết hợp các kết quả để đưa ra câu trả lời cuối cùng.
Vì cấu trúc vấn đề là một sản phẩm giảm, chúng ta có thể mô hình hóa đệ quy theo cách sau:
Dòng cuối cùng là trường hợp cơ sở. Đây là điểm mà đệ quy dừng lại và chúng ta có thể nhận được sản phẩm cuối cùng, khi đệ quy thư giãn.
Chúng tôi sẽ viết chức năng Python tương ứng cho việc này:tail-recursive procedure.
Điều đó dường như là chính xác. Hãy để phân tích những gì thực sự xảy ra trong các cuộc gọi đệ quy.
Bất cứ khi nào các cuộc gọi đệ quy được sử dụng, có một ngăn xếp cuộc gọi, liên tục lưu trữ trạng thái của chương trình, cho đến khi đạt được trường hợp cơ sở. Các phần tử ngăn xếp cuối cùng được bật ra từng cái một sau khi một giá trị được trả về bởi khối tương ứng, khi đệ quy thư giãn từ
import math def factorial[x]: return math.factorial[x] print[factorial[5]]3.
def fact_helper[accum, n]: if n == 0: return accum return fact_helper[accum*n, n-1] def factorial[n]: return fact_helper[1, n] if __name__ == '__main__': print[factorial[4]] print[factorial[7]]
Toàn bộ quá trình được giải thích trong hình dưới đây, để tìm
import math def factorial[x]: return math.factorial[x] print[factorial[5]]4. Phần đầu tiên của toàn bộ quá trình là sự tích tụ của ngăn xếp trong đó mỗi cuộc gọi đệ quy đó được xếp chồng lên nhau cho đến khi hàm trả về 1.
Khi chức năng không còn có thể gọi đệ quy, nó bắt đầu tính toán giai thừa như được trình bày dưới đây.
Đầu ra
Chúng tôi cũng sẽ xem xét việc tìm thấy chức năng này bằng các phương pháp khác: Hãy để sử dụng một quy trình lặp ngay bây giờ.
Sử dụng một thủ tục lặp
Chúng ta có thể trực tiếp lặp qua tất cả các số cho 1 đến N và nhân trực tiếp nhân sản phẩm.
Bây giờ, hãy xem xét bằng cách sử dụng một phương pháp đệ quy cho chức năng giai thừa Python.
- Sử dụng một thủ tục đệ quy