Fortran - フィボナッチ数列の計算!

Updated:


Fortran 95 でフィボナッチ数列の計算をしてみました。

0. 前提条件

  • LMDE 3 (Linux Mint Debian Edition 3; 64bit) での作業を想定。
  • GCC 6.3.0 (GFortran 6.3.0) でのコンパイルを想定。

1. ソースコードの作成

  • 今回は、初項 0, 1, 長さ 20 のフィボナッチ数列を計算することを想定。

File: fibonacci.f95

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
!****************************************************
! フィボナッチ数列計算
!
!   DATE        AUTHOR       VERSION
!   2018.08.20  mk-mode.com  1.00 新規作成
!   2021.12.08  mk-mode.com  1.01 recursive を削除
!
! Copyright(C) 2018-2021 mk-mode.com All Rights Reserved.
!****************************************************
!
program fibonacci_main
  implicit none

  print *, fibonacci(0, 1, 20)

  stop
contains
  ! フィボナッチ数列の計算
  ! * 初項 f1, f2, 長さ n のフィボナッチ数列を返す
  !
  ! :param(in) integer f1
  ! :param(in) integer f2
  ! :param(in) integer n
  ! :return    integer fibonacci(1:n)
  function fibonacci(f1, f2, n)
    implicit none
    integer, intent(in) :: f1, f2, n
    integer :: fibonacci(1:n)
    integer :: i

    fibonacci(1) = f1
    fibonacci(2) = f2

    do i = 3, n
      fibonacci(i) = fibonacci(i - 1) + fibonacci(i - 2)
    end do
  end function fibonacci
end program fibonacci_main

以下は、内部副プログラムではなく、外部副プログラム(interface)を使用するバージョン。

File: fibonacci_2.f95

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
!****************************************************
! フィボナッチ数列計算
!
!   DATE        AUTHOR       VERSION
!   2018.08.20  mk-mode.com  1.00 新規作成
!   2021.12.08  mk-mode.com  1.01 recursive を削除
!
! Copyright(C) 2018-2021 mk-mode.com All Rights Reserved.
!****************************************************
!
program fibonacci_main
  implicit none
  ! インタフェースブロックには引数と関数の戻り値の情報を記述する。
  interface
    function fibonacci(f1, f2, n)
      integer :: f1, f2, n
      integer :: fibonacci(1:n)  ! 戻り値は長さ n の整数配列
    end function fibonacci
  end interface

  print *, fibonacci(0, 1, 20)

  stop
end program fibonacci_main

! フィボナッチ数列の計算
! * 初項 f1, f2, 長さ n のフィボナッチ数列を返す
!
! :param(in) integer f1
! :param(in) integer f2
! :param(in) integer n
! :return    integer fibonacci(1:n)
function fibonacci(f1, f2, n)
  implicit none
  integer, intent(in) :: f1, f2, n
  integer :: fibonacci(1:n)
  integer :: i

  fibonacci(1) = f1
  fibonacci(2) = f2

  do i = 3, n
    fibonacci(i) = fibonacci(i - 1) + fibonacci(i - 2)
  end do
end function fibonacci

2. ソースコードのコンパイル

$ gfortran -o fibonacci fibonacci.f95

$ gfortran -o fibonacci_2 fibonacci_2.f95
  • interface を使用した fibonacci_2 では、引数 f1 に対して INTENT がミスマッチしている旨の警告が出力されるかもしれないが、問題ない。

3. 動作確認

$ ./fibonacci
           0           1           1           2           3           5         8          13          21          34          55          89     144         233         377         610         987        1597        2584        4181
  • fibonacci_2 も結果は同じ。

以上、





 

Sponsored Link

 

Comments