Takuya71 のぶろぐ

外資系ソフトウェア会社で働いてます、認定スクラムマスター

再帰をつかって「誕生日問題」のプログラムを書いてみました。

誕生日問題 再帰使用版

先日は for をつかって 書いてましたが、
今回は 同じ問題を 再帰を使って書いてみました。
scala での初再帰(なんのこっちゃ)です。

def f( i:Int ):Double = {
    def ff( i:Int, acc:Double ):Double = i match {
        case _ if i == 0 => acc
        case _ => ff(i - 1, fff(i) * acc)
    }
    def fff(i:Int):Double = {
        (365 - i.toDouble) / 365
    }
    ff(i,1)
}
println("kekka: 50 = " + (1.0 - f(50)))

実行結果

% scala test2.scala
kekka: 50 = 0.9744319933344283

ちゃんと前と一緒です。
相変わらず、これが適切な書き方かは不明です(汗)

再帰って 最初は 取っつきにくいけど シンプルなプログラム書けるかもって思いました。