次のサンプル コードでは、再帰的ルーチンの機能の一部を説明します。エントリ ポイント 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.
局所記憶節
再帰ルーチンは複数回にわたって呼び出される可能性があるため、1 つの呼び出しで使用するローカル データを、同じコードの別の呼び出しから保護する必要があります。この保護機能を実現するのが局所記憶節です。ルーチンのインスタンスが生成されるたびに、局所記憶節で定義された一連のデータ項目が新たに初期化され、メモリ上に確保されます。局所記憶節がないプログラムで再帰処理を使用すると、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
再帰的呼び出しの文です。