Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 递归子程序在fortran中是如何工作的?_Recursion_Fortran_Fibonacci_Subroutine - Fatal编程技术网

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