再帰呼び出しの使用

以前の呼び出しがまだアクティブなときに、プログラムへの再帰再入を可能にするため、 PROGRAM-ID 段落に RECURSIVE 文節をコーディングします。 RECURSIVE 文節を使用してプログラムを再帰的プログラムにする例、 および再帰的プログラムでローカル・ストレージ・セクションのデータ項目を使用する方法 を、以下に示します。

図 53. ある数の階乗を計算する再帰呼び出し の例
5722WDS V5R4M0  060210 LN  IBM ILE COBOL                MYLIB/FACTORIAL           ISERIES    06/02/15 17:25:51        ページ    2

                                    ソ ー ス
 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
    1     000100 IDENTIFICATION DIVISION.
    2     000200 PROGRAM-ID. FACTORIAL RECURSIVE.
          000300
    3     000400 ENVIRONMENT DIVISION.
    4     000500 CONFIGURATION SECTION.
    5     000600    SOURCE-COMPUTER. IBM-ISERIES.
    6     000700    OBJECT-COMPUTER. IBM-ISERIES.
          000800
    7     000900 DATA DIVISION.
    8     001000 WORKING-STORAGE SECTION.
    9     001100 01 NUMB PIC 9(4) VALUE 5.
   10     001200 01 FACT PIC 9(8) VALUE 0.
          001300
   11     001400 LOCAL-STORAGE SECTION.
   12     001500 01 NUM PIC 9(4).
          001600
   13     001700 PROCEDURE DIVISION.
   14     001800     MOVE NUMB TO NUM.
   15     001900     IF NUMB = 0
   16     002000         MOVE 1 TO FACT
          002100     ELSE
   17     002200         SUBTRACT 1 FROM NUMB
   18     002300         CALL "FACTORIAL"
   19     002400         MULTIPLY NUM BY FACT
          002500     END-IF.
   20     002600     DISPLAY NUM "! = " FACT.
   21     002700     GOBACK.
   22     002800 END PROGRAM FACTORIAL.
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *