В рекурсии R не очень хорошо оптимизирован, но основным подходом является использование функции Recall
. Неясно, что вы намерены использовать синтаксис «двойного вызова», например. f(n-1)(n+1)
где f следует сначала скобками в паре с одним аргументом, а затем другим аргументом. Функция f
не предназначена для возврата функции. Я собираюсь сделать предположение, что вы хотели рекуррентное соотношение в ф (п) быть:
f(n - 1)*(n %% 2) - f(n-1)*(n+1)
Если это предположение верно, то:
f <- function (n) if (n==0) 1 else {Recall(n - 1) *(n %% 2) - Recall(n-1)*(n+1)}
> f(8)
[1] 99225
я сделал предположение до осветления но кажется, что я был прав, думая, что вы не понимаете, что f(n)(n %% 2)
был некорректным R синтаксисом. Обратно к круглым скобкам (скобки на английском английском языке) не означает умножение, а скорее функцию приложения. Посмотрите на ?Syntax
и пример см. ?ecdf
, где ecdf(x)(n)
является приемлемым вложенным вызовом, потому что ecdf возвращает функцию как значение.
Вы пытаетесь вычислить 'f (n-1)' внутри определения функции для 'f (n)'. Вы пытаетесь создать рекурсивную функцию или что-то еще? В любом случае, ваша функция не определена правильно. – ytk
my 'f (n)' is 'f (n - 1) (n %% 2) - f (n-1) (n + 1)' – dddd
Предполагается, что это умножение? 'f (n - 1) * (n %% 2) - f (n-1) * (n + 1)' может быть? 'f (8) # [1] 99225' –