gpt4 book ai didi

recursion - Fortran 中的递归子例程如何工作?

转载 作者:行者123 更新时间:2023-12-02 11:26:26 24 4
gpt4 key购买 nike

我试图理解递归子例程是如何工作的。例如,此递归函数计算斐波那契数。

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

不幸的是我无法用递归子例程来计算它。

RECURSIVE SUBROUTINE fibonacci(n)  
IMPLICIT NONE
INTEGER, INTENT(IN) :: n
INTEGER :: fibo
IF (n <= 2) THEN
fibo = 1
ELSE
CALL fibonacci(n-1) + fibonacci(n-2)
END IF
END SUBROUTINE fibonacci

我可以在递归函数中对 2 个斐波那契函数求和,但不能在递归子例程中求和。问题是我如何使用 CALL 方法在递归子例程中递归调用斐波那契子例程?

最佳答案

子例程对于这个特定问题来说并不是那么好。非递归解决方案将更具可读性。您尝试将子例程用作函数。你不能那样做,它们非常不同。您只能在 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

关于recursion - Fortran 中的递归子例程如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23482445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com