Recursion 在COBOL中,是否可以递归调用段落?
在IBM大型机的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
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.