Haskell入門 階乗の解説

Haskell で階乗のお約束のコードは下記のものらしい

fact 1 = 1
fact n = n * fact (n - 1)

main = do
    print $ fact 5

再帰に不慣れだとちょっと戸惑うので簡単に解説

fact 1 = 1
fact n = n * fact (n - 1)

の部分でパターンマッチを行い、第1引数が 1 の場合はそのまま 1 を返す
第一引数がそれ以外の場合、第一引数が変数 n に束縛されて n * fact (n - 1) が実行される

条件にマッチする間再帰処理が呼び出し続け(往路)、
再帰処理が終わった時点で計算結果を順に返す(復路)

f:id:ria0130:20151120134702p:plain

図にして書くと 1 の時点で往路が終了し、復路に入っているのがわかる
まぁ慣れればそれだけの簡単な話でイメージさえ掴めばとくに難しいこともない