2016-07-11 6 views
-2

У меня есть следующая функция еR. функция. Ошибка

f <- function (n) if (n==0) 1 else f(n - 1)(n %% 2) - f(n-1)(n+1) 

Я думаю, что это определено правильно, но я не могу вычислить п (8)

f(8) 

> Error in f(n - 1) : attempt to apply non-function 

что я должен изменить?

+0

Вы пытаетесь вычислить 'f (n-1)' внутри определения функции для 'f (n)'. Вы пытаетесь создать рекурсивную функцию или что-то еще? В любом случае, ваша функция не определена правильно. – ytk

+0

my 'f (n)' is 'f (n - 1) (n %% 2) - f (n-1) (n + 1)' – dddd

+1

Предполагается, что это умножение? 'f (n - 1) * (n %% 2) - f (n-1) * (n + 1)' может быть? 'f (8) # [1] 99225' –

ответ

0

В рекурсии 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 возвращает функцию как значение.

+0

Большое спасибо – dddd

+0

Комментарии не должны использоваться только для благодарности, но .... upvotes и checkmarks должен. –