Tối ưu hóa hàm giai thừa trong python

Sep 26 2020

Vì vậy, tôi đã đạt được chức năng này với tham số giải nén (* x) , nhưng tôi muốn làm cho nó hiển thị kết quả chứ không trả về nó và tôi muốn tối ưu hóa tốt nghĩa là tôi vẫn cần nó là một hàm hai dòng

1.def fac(*x):
    2.return (fac(list(x)[0], list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial

tôi đã thử đạt được điều này bằng cách triển khai lambda nhưng tôi không biết cách truyền tham số * x

Trả lời

4 JackAshton Sep 27 2020 at 01:59

Lambda giai thừa của bạn là đúng. Tôi hiểu rằng bạn muốn tính toán giai thừa cho một danh sách nói [1, 2, 3] và xuất ra kết quả, đây là cách bạn có thể đạt được điều này.

fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1, 2, 3]])

Cái nào sẽ xuất ra: 1, 2, 6

Một tùy chọn khác, nếu bạn có python 3.8 là sử dụng khả năng hiểu danh sách với toán tử hải mã mới (: =), điều này phức tạp hơn một chút nhưng sẽ tính toán và xuất tất cả các giai thừa lên đến n bao gồm trong khi vẫn phù hợp với hai dòng yêu cầu của bạn.

fac, n = 1, 5
print(*[fac for i in range(1, n+1) if (fac := fac*i)])

Đầu ra sẽ xuất: 1, 2, 6, 24, 120