再帰

再帰とは自分の中で自分自身を呼び出すことです。 この技法を使うとプログラムが簡潔に書ける場合があります。 「萌香」は再帰的な表現と非常に相性がいい言語です。

階乗

1 * 2 * 3 * ... * nをしたものをnの階乗といいます。 ループで表記すると

Fact-l.hnk

「階乗 を 「(n)
    「((i 1) (x 1)) とし
    「(i n <=) の間
      (x (x i *) セット)
      (i (i 1 +) セット)
      を 繰り返し」
      x
      を 行います」 の 仕事」 と 定義 します」

「「10 階乗」 を 表示」      

となるでしょう。

以下の表記も習ったはずです。

fact(1) = 1
fact(n) = n * fact(n - 1)  ;n >= 2

これは再帰を使うと

Fact-r.hnk

「階乗 を
    「(n)
      「もし (n 1 =) ならば
             1
             (n ((n 1 -) 階乗) *)」 の 仕事」
     と 定義 します」	    
    

「「10 階乗」 を 表示」      

のように書けます。

Fibonacci数列

もう一つFibonacci数を例に挙げます。

Fibonacci数は以下のように定義される数列です。

F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n - 2)  ;n >= 2

これを「萌香」で書くと以下のようになります。

Fibonacci.hnk

「なっち を
    「(n)
    「もし (n 0 =) ならば 0
        「もし (n 1 =) ならば 1
            「((n 1 -) なっち) と ((n 2 -) なっち) を たす」」」
        仕事」 と 定義 します」

「(10 なっち) を 表示」