再帰

現在定義中のワードをその定義内で呼び出すためのワードがRECURSEです。通常、再帰的呼び出しといわれ、これを含むワード定義は再帰的定義などと呼ばれています。簡単なコード例:
:  FACTORIAL  ( u -- )	 \ uの階乗を計算する
  dup 2 >
   IF
     dup 1 -  RECURSE  *	 \ f(n)=n*f(n-1)という意味
   THEN
;
入力が1と2のときは計算していません。0より大きい整数数値の入力を前提としています。

RECURSEと書いた個所で、そのワードが呼び出されると考えます。Forth系では、現在定義中のワードは原則としてまだ名前で呼び出すことができないのでRECURSEのようなワードが定義されているわけですが、もし仮に呼び出しができるとすれば、
:  FACTORIAL  ( u -- )	 \ uの階乗を計算する
  dup 2 >
   IF
    dup 1 -  FACTORIAL  *	 \ n*f(n-1)を再帰的に計算
   THEN
;
と書けば同値になります。

一般論として、再帰呼び出しは機械への負担(オーバーヘッド)が大きく、他のループで済ますことができるならそうするべきであるともいわれています。


関連項目:






最終更新:2018年12月19日 23:26