Я новичок в 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