Recursion 在COBOL中,是否可以递归调用段落?

Recursion 在COBOL中,是否可以递归调用段落?,recursion,cobol,mainframe,Recursion,Cobol,Mainframe,在IBM大型机的COBOL中,是否可以递归调用段落 200-PARAGRAPH SECTION. IF WS-COUNTER < 10 ADD 1 TO WS-COUNTER PERFORM 200-PARAGRAPH ELSE DISPLAY 'I'M DONE' END-IF. 200-EXIT. EXIT. 200段。 如果WS-COUNTER

在IBM大型机的COBOL中,是否可以递归调用段落

200-PARAGRAPH SECTION.

    IF WS-COUNTER < 10
       ADD 1 TO WS-COUNTER
       PERFORM 200-PARAGRAPH
    ELSE
       DISPLAY 'I'M DONE'
    END-IF.

 200-EXIT.
    EXIT.
200段。
如果WS-COUNTER<10
将1添加到WS-COUNTER
执行第200段
其他的
显示“我完成了”
结束-如果。
200号出口。
出口

检查当前的COBOL语言引用,但AFAIR a para无法自行执行。这个措辞有点像你会得到不可预测的结果,因为递归是不受支持的

如果您需要重新编写相同的代码,那么可能需要重构以使用PERFORM-UNTIL?

@jdv是正确的

如果需要递归,可以使整个程序递归,请参阅同一手册(企业COBOL语言参考)及其姊妹版《企业COBOL编程指南》,特别是program-ID及其选项

然而,我只建议在没有其他方法的情况下使用递归,这是很少见的。拥有一个递归程序会有很大的开销

您可以显示以下内容:

200-PARAGRAPH SECTION.
200段
位只是一个标签,只是一个名称。单词
部分
告诉你它是什么,而不是段落。您在
部分中确实有一个段落

不,节也不能递归使用

程序部分的部分过去更为重要。随着COBOL1985标准的各种变化,章节变得不那么重要

这是我将如何编码的(根据当地标准):

或者内联执行做同样的事情(我喜欢执行段落,因为它有助于程序的自我记录)

请注意,这些名称是为了向阅读本文的您进行解释。您应该使用对手头的业务任务有意义的不同名称


《语言参考和编程指南》是大量的文档,可以作为PDF免费下载,也可以在线搜索。在这样做之前,先提出这些问题。另外,不要忘记,您应该有同事也可以提供帮助。

我不确定您显示的代码在技术上是否符合递归。但是,下面的代码是独立于平台的

       PERFORM
         VARYING ws-counter FROM 1 BY 1
           UNTIL ws-counter > 9
       END-PERFORM.
       DISPLAY 'I' QUOTE 'M DONE'.
如果您真的想在COBOL程序员之间展开一场斗争,请阅读本文

   200-SECTION SECTION.
   200-PARAGRAPH.
       IF ws-counter < 10
           ADD 1 TO ws-counter
           GO TO 200-PARAGRAPH
       ELSE
           DISPLAY 'I' QUOTE 'M DONE'
       END-IF.
我想这是我的建议

       05  ws-counter               PIC 9(02).
       05  max-passes               PIC 9(02) BINARY VALUE 10.

       MOVE ZERO TO ws-counter.
       PERFORM 200-PARAGRAPH
           UNTIL ws-counter >= max-passes.
       DISPLAY 'I' QUOTE 'M DONE'.

   200-PARAGRAPH.
       ADD 1 TO ws-counter.

注意:PERFORM语句不能导致自身被执行。递归PERFORM语句可能会导致不可预测的结果。
我不知道,您的名字比我几十年来研究COBOL程序时遇到的许多名字更具描述性。:)不需要。imlmenehtstion可以自由支持递归PEFFROM,但不是必需的。@EJP imlmenehtstion?“实现”是我最好的猜测:-d节/段本身正在执行,除非我对递归的理解是错误的,那就是递归。这只是一个技术问题,因为我来自Java,我正试图找出如何用Cobol做事情。IBM的文档称之为递归。我知道你的意思,但这只是一个段落/章节直接执行的例子。让它计算一个阶乘不会改变任何事情,它仍然不能这样做。不管怎样,我确实喜欢最后一个切入点:-)通常有一些代码可以执行类似的操作…另外
执行10次将1添加到ws-counter结束执行显示“我完成了”
是最后一个的进一步中介:-)当然是以初始化ws-counter为前缀。将10添加到ws-counter。显示“我完成了”。:-P
   200-SECTION SECTION.
   200-PARAGRAPH.
       IF ws-counter < 10
           ADD 1 TO ws-counter
           GO TO 200-PARAGRAPH
       END-IF.
       DISPLAY 'I' QUOTE 'M DONE'.
       MOVE 10 TO ws-counter.
       DISPLAY 'I' QUOTE 'M DONE'.
       05  ws-counter               PIC 9(02).
       05  max-passes               PIC 9(02) BINARY VALUE 10.

       MOVE ZERO TO ws-counter.
       PERFORM 200-PARAGRAPH
           UNTIL ws-counter >= max-passes.
       DISPLAY 'I' QUOTE 'M DONE'.

   200-PARAGRAPH.
       ADD 1 TO ws-counter.