У меня есть следующая функция:
f(n) = f(n - 1) + (n - 1)
f(0) = 0
n >= 0
Я имею n
объявленный на столбце A и потребности результат f(n)
на столбце B.
Я пытаюсь найти Формулу Excel эквивалентной для этой функции.
Демонстрационный результат:
A | B
--+--
0 | 0
или:
A | B
--+--
1 | 0
или:
A | B
--+--
4 | 6
но никогда:
A | B
--+--
0 | 0
1 | 0
2 | 1
...
Самая большая проблема, я не могу моделировать значение f(n - 1)
. Так ссылка на предыдущую строку как вышеупомянутый пример недопустима. Я почти уверен, что ответ тривиален, я просто не могу найти его.
Это помогает?
f(n) = sum of all positive integers less than n
Это должно, особенно с помощью некоторой арифметики.
Хорошо, учитывая, что люди теперь отправляют ответы с определяемыми пользователем функциями, вот ответ
f(n) = (n-1)n/2
Обновление: Для тех, кто не видит, что формула не использует информации ни от каких других строк (см. Stan R. 's комментарий ниже), я смешал порядок немного:
0 =(A1-1)*A1/2 0 9 =(A2-1)*A2/2 36 2 =(A3-1)*A3/2 1 4 =(A4-1)*A4/2 6 6 =(A5-1)*A5/2 15 5 =(A6-1)*A6/2 10 10 =(A7-1)*A7/2 45 8 =(A8-1)*A8/2 28 3 =(A9-1)*A9/2 3 7 =(A10-1)*A10/2 21 1 =(A11-1)*A11/2 0 ...
Необходимо ли решить его рекурсивно? Это - конечно, не самый хороший способ решить его:
Суммируйте номера 1 - 10
1 + 2 + 3 + 4 + 5
+ 10 + 9 + 8 + 7 + 6
-- -- -- -- --
11 +11 +11 +11 +11 = 55
или, поскольку это получено в итоге, (n+1)(n/2)
- с n=10 это, очевидно, 11 x 5
О функции можно вновь заявить для устранения рекурсии.
Давайте возьмем несколько примеров здесь...
f(4)=1+2+3=6
f(5)=1+2+3+4=10
f(6)=1+2+3+4+5=15
Здесь существует шаблон:
f(4)=1+2+3=6=4*1.5
f(5)=1+2+3+4=10=5*2
f(6)=1+2+3+4+5=15=6*2.5
что означает, что мы можем обобщить функцию к f(n)=1+2+...+n=n*(n-1)/2
для n> 1 и f(n)=0
иначе.
Получающаяся Формула Excel может затем быть записана как =IF(A5>1;A5*(A5-1)/2);0)
, принятие A5 содержит n.
Очевидно, если Ваша формула более сложна, чем та, Вы дали, это может стать вполне немного более твердым, и это может быть намного более быстрым и легче просто записать определяемую пользователем функцию как та, предложенная Scott и затем использовать это.
Не уверенный, как сделать это с чистыми формулами. Одна опция является UDF
Public Function f(n As Integer) As Integer
If (n = 0) Then
f = 0
Exit Function
End If
If (n > 0) Then
f = f(n - 1) + (n - 1)
End If
End Function
и затем формула справедлива =f(A1)
если понимают Вас правильно затем, Вы пытаетесь создать рекурсивную функцию, и циклические ссылки в Excel не позволяются. Ваш лучший выбор состоит в том, чтобы создать Вашу собственную функцию рабочего листа.
Нажмите Alt+F11 для входа в VB затем Вставляют>, Модуль затем следует ответу Scott.
Обычно способ, которым это сделано, состоит в том, чтобы определить Ваши собственные функции. В редакторе VBA вставьте новый модуль в свою рабочую книгу и вставку в следующей функции:
Function f(n As Integer)
If n <= 0 Then
f = 0
Else
f = f(n - 1) + (n - 1)
End If
End Function
Теперь можно назвать это непосредственно:
=f(A2)
=IF(MOD(A1,2)=0,(A1-1)*ROUND(A1/2,0), (A1) * ((A1-1)/2))
Я не знаю, если, именно это Вы ищете.