chap07/sample6.f90

サンプルコードのダウンロード

 1program sample
 2  implicit none
 3
 4  ! 再帰呼び出し
 5  write(*, *) fact(2), fact(4), fact(6)
 6
 7  stop
 8contains
 9
10  !
11  ! <<< recursive (再帰的呼び出し) >>>
12  !
13  ! ちなみに以下の実装で正しい値が得られるのは n = 12 までである.なぜか?
14  !
15  recursive function fact(n) result(m) ! recursiveを指定する
16    implicit none
17    integer, intent(in) :: n
18    integer :: m
19
20    if(n == 1) then                    ! 無限ループにならないように
21      m = 1
22    else
23      m = n * fact(n - 1)              ! 自分自身を(異なる引数で)呼び出す
24    endif
25
26  endfunction fact
27
28endprogram sample