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

时间:2015-01-06 20:40:21

标签: recursion cobol mainframe

在IBM Mainframe的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.

3 个答案:

答案 0 :(得分:5)

检查当前的COBOL语言参考,但AFAIR para不能自行执行。措辞就像你会得到不可预测的结果,因为不支持递归。

如果您需要查看相同的代码,可能需要重构使用PERFORM UNTIL吗?

答案 1 :(得分:4)

@jdv是正确的。

如果你想要递归,你可以使整个程序递归,查看相同的手册(企业COBOL语言参考)和它的姐妹,企业COBOL编程指南,特别是在PROGRAM-ID及其选项。

但是,如果你没有其他办法,我只推荐递归,这种情况很少见。使用递归程序会产生很大的开销。

你表现出来:

200-PARAGRAPH SECTION.

200-PARAGRAPH位只是一个标签,只是一个名称。单词SECTION告诉你它是什么,它不是一个段落。您的 中的段落<{1}}。

而且,不能以递归方式使用SECTION。

程序部门的部分过去比较重要。随着COBOL 1985标准的各种变化,SECTION变得不那么重要了。

这就是我编码的方式(符合当地标准):

SECTION

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

请注意,这些名称是为您解释的。您应该使用对手头的业务任务有意义的不同名称。

“语言参考和编程指南”是大量文档,可以免费下载或下载或在线搜索。在SO之前制作这些一个通话点。另外不要忘记你应该有同事也可以提供帮助。

答案 2 :(得分:1)

我不确定您在技术上显示的代码是否有资格作为递归。但是,以下代码可以运行并且与平台无关。

       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.

虽然我可能更喜欢这个,但如果有人选择GO TO方法。

   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.