再帰的ルーチンの例

次のサンプル コードでは、再帰的ルーチンの機能の一部を説明します。エントリ ポイント factorl で識別されるこのルーチンは、入力された数値の階乗を計算します。

 1 working-storage section.
 2 01 n             pic x(4) comp-x.
 3 01 factorial     pic x(4) comp-x.
 4 01 m             pic x(4) comp-x.
 5
 6 local-storage section.
 7
 8 procedure division.
 9     accept n
10     move 1 to factorial
11     call 'factorl' using n
12     display 'factorial of ' n ' is ' factorial
13     stop run.
14
15 entry 'factorl' using m.
16     if m < 1
17         move 1 to factorial
18     else
19         if m > 1
20             multiply m by factorial
21             subtract 1 from m
22             call 'factorl' using m
23         end-if
24     end-if
25
26     exit program.
注:
  • 6 行目

    局所記憶節

    再帰ルーチンは複数回にわたって呼び出される可能性があるため、1 つの呼び出しで使用するローカル データを、同じコードの別の呼び出しから保護する必要があります。この保護機能を実現するのが局所記憶節です。ルーチンのインスタンスが生成されるたびに、局所記憶節で定義された一連のデータ項目が新たに初期化され、メモリ上に確保されます。局所記憶節がないプログラムで再帰処理を使用すると、RTS (ランタイム システム) エラー メッセージが表示されます。

    このコード例にはローカル記憶域を使用するデータ項目はありませんが、そのようなデータ項目の有無にかかわらず、再帰ルーチンには局所記憶節の宣言が必要です。

  • 15 行目

    entry 'factorl' using m

    再帰ルーチン factorl のエントリ ポイント。プログラム ID またはエントリ ポイントのどちらかを使用して、プログラムは自身を呼び出すことができます。

  • 19 から 23 行目

    if m > 1

    multiply m by factorial

    subtract 1 from m

    call 'factorl' using m

    end-if

    このループに再帰呼び出しが含まれています。

  • 22 行目

    call 'factorl' using m

    再帰的呼び出しの文です。