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的值。 

 

RECURSIVE

     如上图,对于每次调用RECUTEST,LOCAL-STORAGE中的NUM都会保存各自的值。而WORKING-STORAGE中的NUMB只有一

     份值。这点是COBOL实现递归的关键。  

posted @ 2010-06-13 21:59  小冰  阅读(808)  评论(0编辑  收藏  举报