В частности, я пытаюсь эмулировать решение для Project Euler 31 в Фортране. Для этого мне нужно прочитать массив монет. И поскольку функция является рекурсивной, так как функция будет вызываться множество раз, я не хочу каждый раз передавать список в качестве аргумента, потому что если у меня будет множество копий списка, код будет иметь нагрузки накладных расходов памяти. Кроме того, в предыдущих задачах, например, для упрощения дроби, мне нужно было пройти через очень большой список. Итак, мой вопрос: в Фортране, как вы получаете доступ к переменным, определенным в основной программе, из функции. Это даже достижимо, и если нет, то сколько (намерение) поможет уменьшить любое дублирование памяти?
При необходимости:
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