Python
再帰

pythonのlambdaで再帰処理

More than 1 year has passed since last update.

pythonのlambda

n%で「当たり」とした時に当たりまで何回失敗したかを計測するlambda関数を作ってみる。


lambda.py

from random import random as r

count = lambda i : (lambda i, f: f(i, 1, f))(i, lambda i, c, f: f(i, c+1, f) if r() > i else c)

print(count(0.1)) # 10%が成功するまでの回数


解説

i = %を数値表記したもの

c = 成功するまでのカウンタ

f = 再帰関数

横に長いので分割


t1.py

lambda i : (lambda i, f: f(i, 1, f)) #A(関数)

(i, lambda i, c, f: f(i, c+1, f) if r() > 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%までに失敗した計測できてるかはあんまわからない。ごめんなさい。