次のサンプル コードでは、再帰的ルーチンの機能の一部を説明します。エントリ ポイント 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.
局所記憶節n
再帰的ルーチンは何度も呼び出される可能性があります。そのため、ある呼び出しでのローカル データを、同じコードの別の呼び出しから保護する必要があります。この保護は、局所記憶節を使用して行います。ルーチンの新しいインスタンスが開始するたびに、初期化されたこの節の複製がメモリ中に作成されます。局所記憶節がないプログラムで再帰処理を使用すると、RTS(ランタイム システム)エラー メッセージが表示されます。
上記のルーチンには局所記憶節のデータ項目がありませんが、局所記憶節の宣言を行う必要があります。
entry 'factorl' using m
再帰的ルーチン factorl のエントリ ポイントです。プログラム ID またはエントリ ポイントのどちらかを使用して、プログラムは自身を呼び出すことができます。
if m > 1
multiply m by factorial
subtract 1 from m
call 'factorl' using m
end-if
このループに再帰的呼び出しが含まれています。
call 'factorl' using m
再帰的呼び出しの文です。