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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
module recursion_03
implicit none
contains
integer function solver_caller(f, iter)
interface
integer function f()
end function
end interface
integer, intent(in) :: iter
solver_caller = solver(f, iter)
end function
integer function solver(f, iter)
interface
integer function f()
end function
end interface
!procedure(f_type) :: f
integer, intent(in) :: iter
integer f_val
f_val = f()
print *, "before:", f_val
solver = sub1(2, iter-1)
!solver = sub1(2, iter-1) + f()
f_val = f()
print *, "after:", f_val
end function
integer function sub1(y, iter)
integer, intent(in):: y, iter
integer x
integer tmp
x = y
print *, "in sub1"
if (iter == 1) then
sub1 = 1
return
end if
tmp = getx()
sub1 = solver_caller(getx, iter)
contains
integer function getx()
print *, "x in getx", x
getx = x
end function
end function
end module recursion_03
program main
use recursion_03
implicit none
integer :: r
r = sub1(3, 3)
print *, "r =", r
end program main
|