3 votes

Comment calculer la somme de tous les entiers positifs inférieurs à n ?

J'ai la fonction suivante :

f(n) = f(n - 1) + (n - 1)
f(0) = 0
n >= 0

Tengo n déclarée sur la colonne A, et avoir besoin du résultat de f(n) sur la colonne B.

J'essaie de trouver l'équivalent en formule Excel de cette fonction.

Résultat de l'échantillonnage :

A | B
--+--
0 | 0

ou :

A | B
--+--
1 | 0

ou :

A | B
--+--
4 | 6

mais jamais :

A | B
--+--
0 | 0
1 | 0
2 | 1
...

Le plus gros problème est que je ne peux pas simuler la valeur de f(n - 1) . La référence à la ligne précédente, comme dans l'exemple ci-dessus, n'est donc pas valable. Je suis presque sûr que la réponse est triviale, mais je ne la trouve pas.

15voto

Hanno Fietz Points 8685

Cela vous aide-t-il ?

f(n) = sum of all positive integers less than n

Il devrait l'être, surtout avec l'aide de un peu d'arithmétique .

OK, étant donné que les gens postent maintenant des réponses avec des fonctions définies par l'utilisateur , voici la réponse

f(n) = (n-1)n/2

Mise à jour : Pour ceux qui ne voient pas que la formule n'utilise aucune information provenant d'autres lignes (voir le commentaire de Stan R. ci-dessous), j'ai un peu mélangé l'ordre :

 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
...

7voto

Lloyd Points 253

Devez-vous résoudre le problème de manière récursive ? Ce n'est certainement pas la façon la plus agréable de le résoudre :

Additionner les nombres de 1 à 10

   1 + 2 + 3 + 4 + 5
+ 10 + 9 + 8 + 7 + 6
  --  --  --  --  --
  11 +11 +11 +11 +11 = 55

ou, comme on le résume, (n+1)(n/2) -- avec n=10, c'est évidemment 11 x 5

3voto

Akram Lazkanee Points 13

La fonction peut être reformulée pour éliminer la récursivité.

Prenons quelques exemples...

f(4)=1+2+3=6
f(5)=1+2+3+4=10
f(6)=1+2+3+4+5=15

Il y a là un modèle :

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

Ce qui signifie que nous pouvons généraliser la fonction à f(n)=1+2+...+n=n*(n-1)/2 pour n>1 et f(n)=0 autrement.

La formule Excel résultante peut alors être écrite comme suit =IF(A5>1;A5*(A5-1)/2);0) en supposant que A5 contient n.

Évidemment, si votre formule est plus complexe que celle que vous avez donnée, cela peut devenir un peu plus difficile, et il peut être beaucoup plus rapide et facile d'écrire une fonction définie par l'utilisateur comme celle suggérée par Scott et de l'utiliser.

3voto

user8626 Points 46

Excel dispose d'une formule appelée tableau, qui permet à une fonction de renvoyer un ensemble de valeurs. Pour en savoir plus aquí . Ces formules vous permettront effectivement d'écrire, avec un peu de créativité, des analogues d'algorithmes récursifs. Les formules de tableaux doivent être introduites à l'aide de Shift-Ctrl-Entrée .

Pour répondre à votre question, faites en sorte qu'une fonction de type tableau renvoie 1 à travers n-1 et l'envelopper dans une somme. Ici, c'est le cas, Indirect crée une référence, et A1 cale n :

=SUM( ROW( INDIRECT("1:"&A1-1) ) )

2voto

itj Points 773

Je ne suis pas sûr de savoir comment procéder avec des formules pures. Une option est un 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

et la formule est alors la suivante =f(A1)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X