再帰的ルーチンの例

次のサンプル コードでは、再帰的ルーチンの機能の一部を説明します。エントリ ポイント 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 行目

    local-storage section

    再帰的ルーチンは何度も呼び出される可能性があります。そのため、ある呼び出しでのローカル データを、同じコードの別の呼び出しから保護する必要があります。この保護は、local-storage(局所記憶)節を使用して行います。ルーチンの新しいインスタンスが開始するたびに、初期化されたこの節の複製がメモリ中に作成されます。局所記憶節がないプログラムで再帰処理を使用すると、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

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