Example: storage sections
The following example is a recursive
program that uses both WORKING-STORAGE
and 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.
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 |