具体来说,我试图模拟Fortran中Project Euler 31的解决方案.为了做到这一点,我需要从一系列硬币中读取.由于函数是递归的,因为函数将被调用次数,我不希望每次都必须将列表作为参数传递,因为如果我有大量的列表副本,代码就会有负载内存开销 此外,在以前的问题中,比如简化分数的函数,我需要通过一个非常大的列表.所以我的问题是:在Fortran中,如何从函数中访问主程序中定义的变量.它是否可以实现,如果没有,有多少意图(帮助)减轻任何内存重复?
如有必要:
RECURSIVE FUNCTION NWAYS(AMOUNT,CUR_COIN,) RESULT(RES)
IMPLICIT NONE
INTEGER :: AMOUNT, CUR_COIN, RES, COINS !Coins is a list defined in the main program
RES = 0
IF (CUR_COIN<=1) THEN
RES = 1
RETURN
END IF
DO WHILE(AMOUNT>=0)
RES = RES + NWAYS(AMOUNT,CUR_COIN-1)
AMOUNT = AMOUNT-COINS(CUR_COIN)
END DO
RETURN
END FUNCTION NWAYS
Run Code Online (Sandbox Code Playgroud)
执行此操作的标准方法是在模块中定义变量并在函数中使用模块.所以你会有类似的东西:
module var_mod
integer, allocatable :: coins(:)
end module var_mod
program euler
use var_mod
...
allocate (coins(ncoins))
...
recursive function nways (...)
use var_mod
...
Run Code Online (Sandbox Code Playgroud)
现在在nways中,阵列硬币是可见的,你不必每次都传递它.我制作了可分配的硬币,以便您可以在主程序中将其分配到所需的大小.
归档时间: |
|
查看次数: |
201 次 |
最近记录: |