The following is an example of a recursive program that uses both WORKING-STORAGE and LOCAL-STORAGE.
CBL apost,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.
The program produces the following output:
0000! = 00000001 0001! = 00000001 0002! = 00000002 0003! = 00000006 0004! = 00000024 0005! = 00000120
The following tables show the changing values of the data items in LOCAL-STORAGE and WORKING-STORAGE in the successive recursive calls of the program, and in the ensuing gobacks. During the gobacks, fact progressively accumulates the value of 5! (five factorial).
| Recursive calls | Value for num in LOCAL-STORAGE | Value for numb in WORKING-STORAGE | Value for fact in WORKING-STORAGE |
|---|---|---|---|
| Main | 5 | 5 | 0 |
| 1 | 4 | 4 | 0 |
| 2 | 3 | 3 | 0 |
| 3 | 2 | 2 | 0 |
| 4 | 1 | 1 | 0 |
| 5 | 0 | 0 | 0 |
| Gobacks | Value for num in LOCAL-STORAGE | Value for numb in WORKING-STORAGE | Value for fact in WORKING-STORAGE |
|---|---|---|---|
| 5 | 0 | 0 | 1 |
| 4 | 1 | 0 | 1 |
| 3 | 2 | 0 | 2 |
| 2 | 3 | 0 | 6 |
| 1 | 4 | 0 | 24 |
| Main | 5 | 0 | 120 |
related concepts
Comparison of WORKING-STORAGE and LOCAL-STORAGE