Recursion 递归子程序在fortran中是如何工作的?
我试图理解递归子程序是如何工作的。例如,这个递归函数计算斐波那契数Recursion 递归子程序在fortran中是如何工作的?,recursion,fortran,fibonacci,subroutine,Recursion,Fortran,Fibonacci,Subroutine,我试图理解递归子程序是如何工作的。例如,这个递归函数计算斐波那契数 RECURSIVE FUNCTION fibonacci(n) RESULT(fibo) IMPLICIT NONE INTEGER, INTENT(IN) :: n INTEGER :: fibo IF (n <= 2) THEN fibo = 1 ELSE fibo = fibonacci(n-1) + fibonacci(n-2) END IF END FUNCTION f
RECURSIVE FUNCTION fibonacci(n) RESULT(fibo)
IMPLICIT NONE
INTEGER, INTENT(IN) :: n
INTEGER :: fibo
IF (n <= 2) THEN
fibo = 1
ELSE
fibo = fibonacci(n-1) + fibonacci(n-2)
END IF
END FUNCTION fibonacci
递归函数fibonacci(n)结果(fibo)
隐式无
整数,意图(IN)::n
整数::fibo
IF(n子例程对于这个特定的问题不是很好。非递归的解决方案会更具可读性。您尝试将子例程用作函数。您不能这样做,它们是非常不同的。您只能在call
语句中使用它们,并且一次只能使用一个。如果您想要某个结果,必须为此使用参数
RECURSIVE SUBROUTINE fibonacci(n,fibo)
IMPLICIT NONE
INTEGER, INTENT(IN) :: n
INTEGER, INTENT(OUT) :: fibo
INTEGER :: tmp
IF (n <= 2) THEN
fibo = 1
ELSE
CALL fibonacci(n-1,fibo)
CALL fibonacci(n-2,tmp)
fibo = fibo + tmp
END IF
END SUBROUTINE fibonacci
call fibonacci(5,i)
print *, i
end
递归子程序fibonacci(n,fibo)
隐式无
整数,意图(IN)::n
整数,意图(输出)::fibo
整数::tmp
如果(n)
RECURSIVE SUBROUTINE fibonacci(n,fibo)
IMPLICIT NONE
INTEGER, INTENT(IN) :: n
INTEGER, INTENT(OUT) :: fibo
INTEGER :: tmp
IF (n <= 2) THEN
fibo = 1
ELSE
CALL fibonacci(n-1,fibo)
CALL fibonacci(n-2,tmp)
fibo = fibo + tmp
END IF
END SUBROUTINE fibonacci
call fibonacci(5,i)
print *, i
end