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