【发布时间】:2020-10-05 21:31:38
【问题描述】:
我是 COBOL 和 GnuCOBOL 的新手(在 Windows 中)。
我正在尝试编写一个带有尾部的递归函数,但程序没有返回值,这可能会帮助我。我想知道我想要的语言是否可以实现?
跟随功能码
IDENTIFICATION DIVISION.
FUNCTION-ID. FATBASE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION ALL INTRINSIC.
DATA DIVISION.
LOCAL-STORAGE SECTION.
77 LS-NUM PIC 99.
77 LS-PAR PIC 99.
LINKAGE SECTION.
77 LK-NUM PIC 99.
77 LK-PAR PIC 99.
77 LK-FAT PIC 9(33).
PROCEDURE DIVISION USING BY VALUE LK-NUM, LK-PAR
RETURNING LK-FAT.
IF NUMVAL(LK-NUM) = 0
COMPUTE LK-FAT = NUMVAL(LK-PAR)
ELSE
COMPUTE LS-NUM = LK-NUM - 1
COMPUTE LS-PAR = LK-NUM * NUMVAL(LK-PAR)
COMPUTE LK-FAT = NUMVAL(FATBASE(LS-NUM, LS-PAR))
END-IF
GOBACK.
END FUNCTION FATBASE.
跟随调用函数的程序的代码
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTEFAT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION FATBASE
FUNCTION ALL INTRINSIC.
DATA DIVISION.
LOCAL-STORAGE SECTION.
77 LS-NUM PIC 99.
77 LS-FAT PIC Z(33).
PROCEDURE DIVISION.
ACCEPT LS-NUM.
MOVE FATBASE(LS-NUM, 1) TO LS-FAT
DISPLAY FATBASE(LS-NUM, 1)
STOP RUN.
至于 IF/THEN 命令,这些都可以正常工作。 COMPUTE 命令出现问题。 COMPUTE 行似乎没有预期的计算效果。似乎只有 LS-NUM 和 LK-NUM 变量有任何值。其他变量在处理过程中归零。
IF NUMVAL(LK-NUM) = 0
COMPUTE LK-FAT = NUMVAL(LK-PAR)
ELSE
COMPUTE LS-NUM = LK-NUM - 1
COMPUTE LS-PAR = LK-NUM * NUMVAL(LK-PAR)
COMPUTE LK-FAT = NUMVAL(FATBASE(LS-NUM, LS-PAR))
END-IF
提前感谢您的帮助。
程序已附上。
最好的问候。
================================================ ==============================
在这篇文章之后的一天结束时,我得到了外部帮助 - 可在:https://sourceforge.net/p/open-cobol/discussion/cobol/thread/54637a961a/?limit=250#313c/7037/dbaf/3684
【问题讨论】:
-
DISPLAY FATBASE(LS-NUM, 1)
标签: function recursion cobol tail gnucobol