Jump to content

Fibonacci sequence: Difference between revisions

Line 164:
===Recursive===
In ISO Fortran 90 or later, use a RECURSIVE function:
module fibonacci
recursive function fibR(n) result(fib)
contains
integer, intent(in) :: n
recursive function fibR(n) result(fib)
integer :: fib
integer, intent(in) :: n
select caseinteger (n) :: fib
case (:0); fib = 0
select case (1n); fib = 1
case default(:0); fib = fibR(n-1) +fib fibR(n-2)= 0
end select case (1); fib = 1
case (1)default; fib = fibR(n-1) + fibI = fib1fibR(n-2)
end function fibR
end select
 
end function fibR
===Iterative===
In ISO Fortran 90 or later:
function fibI(n)
integer, intent(in) :: n
integer, parameter :: fib0 = 0, fib1 = 1
integer :: fibI, back1, back2, i
select case default(n)
case (:0); fibI = fib1fib0
case (1); back1 fibI = fibIfib1
end do
case do i = 2, ndefault
back1 fibI = fib0fib1
back2back1 = back1fib0
do i = 2, n
fibI back2 = back1 + back2
integer ::back1 fib= fibI
fibI = back1 + back2
end do
end select
end function fibI
end module fibonacci
 
Test program
program fibTest
use fibonacci
do i = select0, case (n)10
print *, fibr(i), case fibi(:0i); fibI = fib0
end do
case (1); fibI = fib1
end program fibTest
 
case default
Output
fibI = fib1
0 0
back1 = fib0
1 1
do i = 2, n
1 1
back2 = back1
2 2
back1 = fibI
3 3
fibI = back1 + back2
5 5
end do
8 8
end select
13 13
end function fibI
21 21
34 34
55 55
 
=={{header|Haskell}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.