module man_or_boy implicit none contains recursive integer function A(k,x1,x2,x3,x4,x5) result(res) integer, intent(in) :: k interface recursive integer function x1() end function recursive integer function x2() end function recursive integer function x3() end function recursive integer function x4() end function recursive integer function x5() end function end interface integer :: m if ( k <= 0 ) then res = x4()+x5() else m = k res = B() end if contains recursive integer function B() result(res) m = m-1 res = A(m,B,x1,x2,x3,x4) end function B end function A recursive integer function one() result(res) res = 1 end function recursive integer function minus_one() result(res) res = -1 end function recursive integer function zero() result(res) res = 0 end function end module man_or_boy program test use man_or_boy write (*,*) A(10,one,minus_one,minus_one,one,zero) end program test