以下に、WORKING-STORAGE と LOCAL-STORAGE の両方を使用する再帰的プログラムの例を示します。
CBL pgmn(lu)
*********************************
* Recursive Program - Factorials
*********************************
IDENTIFICATION DIVISION.
Program-Id. factorial recursive.
ENVIRONMENT DIVISION.
DATA DIVISION.
Working-Storage Section.
01 numb pic 9(4) value 5.
01 fact pic 9(8) value 0.
Local-Storage Section.
01 num pic 9(4).
PROCEDURE DIVISION.
move numb to num.
if numb = 0
move 1 to fact
else
subtract 1 from numb
call 'factorial'
multiply num by fact
end-if.
display num '! = ' fact.
goback.
End Program factorial.
このプログラムは、次のような出力を生成します。
0000! = 00000001 0001! = 00000001 0002! = 00000002 0003! = 00000006 0004! = 00000024 0005! = 00000120
次の表は、プログラムの連続する再帰呼び出し (CALL) および結果として起こる戻り (GOBACK) における、LOCAL-STORAGE および WORKING-STORAGE 内のデータ項目の値の変化を示しています。戻り時、fact は 5! の値を次々に累算します (5 階乗)。
| 再帰呼び出し (CALL) | LOCAL-STORAGE の num の値 | WORKING-STORAGE の numb の値 | WORKING-STORAGE の fact の値 |
|---|---|---|---|
| メイン | 5 | 5 | 0 |
| 1 | 4 | 4 | 0 |
| 2 | 3 | 3 | 0 |
| 3 | 2 | 2 | 0 |
| 4 | 1 | 1 | 0 |
| 5 | 0 | 0 | 0 |
| 戻り (GOBACK) | LOCAL-STORAGE の num の値 | WORKING-STORAGE の numb の値 | WORKING-STORAGE の fact の値 |
|---|---|---|---|
| 5 | 0 | 0 | 1 |
| 4 | 1 | 0 | 1 |
| 3 | 2 | 0 | 2 |
| 2 | 3 | 0 | 6 |
| 1 | 4 | 0 | 24 |
| メイン | 5 | 0 | 120 |