COBOL中的递归
COBOL中很少会用到递归,也是无聊时看IBM BOOK看到这个例子。
IDENTIFICATION DIVISION.
PROGRAM-ID. RECUTEST RECURSIVE.
*******************************************
* RECURSIVE TEST
******************************************
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 THEN
MOVE 1 TO FACT
ELSE
SUBTRACT 1 FROM NUMB
COMPUTE NUMB = NUMB - 1
CALL 'RECUTEST'
MULTIPLY NUM BY FACT
COMPUTE FACT = FACT * NUM
END-IF
DISPLAY NUM '!= ' FACT
GOBACK.
END PROGRAM RECUTEST.
代码没有高亮什么的,大家将就着看。代码已测试通过,可运行。
有两个要点:
(1)Program-ID段后面要多加RECURSIVE关键字。
(2)用LOCAL-STORAGE SECTION来保存每次进入程序时NUM的值。
如上图,对于每次调用RECUTEST,LOCAL-STORAGE中的NUM都会保存各自的值。而WORKING-STORAGE中的NUMB只有一
份值。这点是COBOL实现递归的关键。