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%までに失敗した計測できてるかはあんまわからない。

取り敢えず再帰出来てよかった。