1. ホーム
  2. python

Pythonでラムダ関数は自分自身を再帰的に呼び出すことができますか?

2023-09-04 09:57:42

質問

通常の関数は、その定義に自分自身への呼び出しを含むことができ、問題はありません。 私はラムダ関数でそれを行う方法を見つけ出すことができませんが、ラムダ関数は参照するための名前を持っていないという単純な理由です。 どうすればいいのでしょうか? どのように?

どのように解決する?

これを行うために考えられる唯一の方法は、関数に名前を付けることです。

fact = lambda x: 1 if x == 0 else x * fact(x-1)

またはその代わりに、以前のバージョンの python の場合。

fact = lambda x: x == 0 and 1 or x * fact(x-1)

更新 他の回答からのアイデアを使用して、私は階乗関数を1つの無名のラムダに楔を打つことができました。

>>> map(lambda n: (lambda f, *a: f(f, *a))(lambda rec, n: 1 if n == 0 else n*rec(rec, n-1), n), range(10))
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]

というわけで、可能ではありますが、あまりお勧めはしません!