Pythonで階乗関数を最適化する

Sep 26 2020

だから私はパラメータ(* x)をアンパックしてこの関数を達成しましたが、結果を返さずに表示させたいので、2行の関数である必要があることを意味する適切な最適化が必要です

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

ラムダを実装してこれを達成しようとしましたが、* xパラメーターを渡す方法がわかりませんでした

回答

4 JackAshton Sep 27 2020 at 01:59

あなたの階乗ラムダは正しいです。[1、2、3]のようなリストの階乗を計算して結果を出力したいと思います。これが、これを実現する方法です。

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

出力されるもの:1、2、6

もう1つのオプションは、Python 3.8を使用している場合、新しいwalrus演算子(:=)でリスト内包表記を使用することです。これは少し注意が必要ですが、必要な2行に収まりながら、nまでのすべての階乗を計算して出力します。

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

出力されるもの:1、2、6、24、120