pythonのlambdaで再帰処理
pythonのlambda
n%で「当たり」とした時に当たりまで何回失敗したかを計測するlambda関数を作ってみる。
import numpy as np
count = lambda i : (lambda i, f: f(i, 1, f))(i, lambda i, c, f: f(i, c+1, f) if np.random.rand() > i else c)
print(count(0.1)) # 10%が成功するまでの回数
解説
i = %を数値表記したもの
c = 成功するまでのカウンタ
f = 再帰関数
横に長いので分割
lambda i : (lambda i, f: f(i, 1, f)) #A(関数)
(i, lambda i, c, f: f(i, c+1, f) if np.random.rand() > i else c) #B(引数)
1. count(n)で呼び出した際にAの引数iへnが渡される。
2. Bの第一引数が1.から受け取ったiが渡される。
3. Bの第二引数が再帰関数としてfに渡される。
4. この2つの引数をAの中にあるlambdaへ渡す。
5. Aの中のlambdaは2.と3.の引数を受け取り再帰関数を実行する。
6. rand()がnを下回るまでcを加算しながら繰り返す。
みたいな感じだと思う。
数学は苦手だから本当に10%までに失敗した計測できてるかはあんまわからない。
取り敢えず再帰出来てよかった。