Как я могу вычислить сумму всех положительных целых чисел меньше, чем n?

У меня есть следующая функция:

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). Так ссылка на предыдущую строку как вышеупомянутый пример недопустима. Я почти уверен, что ответ тривиален, я просто не могу найти его.

3
задан 04.08.2009, 02:07

7 ответов

Это помогает?

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
...
14
ответ дан 07.12.2019, 22:47

Необходимо ли решить его рекурсивно? Это - конечно, не самый хороший способ решить его:

Суммируйте номера 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

7
ответ дан 07.12.2019, 22:47

О функции можно вновь заявить для устранения рекурсии.

Давайте возьмем несколько примеров здесь...

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 и затем использовать это.

3
ответ дан 07.12.2019, 22:47

Не уверенный, как сделать это с чистыми формулами. Одна опция является 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)

2
ответ дан 07.12.2019, 22:47

если понимают Вас правильно затем, Вы пытаетесь создать рекурсивную функцию, и циклические ссылки в Excel не позволяются. Ваш лучший выбор состоит в том, чтобы создать Вашу собственную функцию рабочего листа.

Нажмите Alt+F11 для входа в VB затем Вставляют>, Модуль затем следует ответу Scott.

0
ответ дан 07.12.2019, 22:47

Обычно способ, которым это сделано, состоит в том, чтобы определить Ваши собственные функции. В редакторе 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)
0
ответ дан 07.12.2019, 22:47
=IF(MOD(A1,2)=0,(A1-1)*ROUND(A1/2,0), (A1) * ((A1-1)/2))

Я не знаю, если, именно это Вы ищете.

0
ответ дан 07.12.2019, 22:47

Теги

Похожие вопросы