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

 

COBOL中的递归

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

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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-22
  • 2021-12-19
  • 2021-07-24
  • 2021-10-10
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-09
  • 2021-08-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案