récursion en VBA

récursion en VBA - VB/VBA/VBS - Programmation

Marsh Posté le 23-02-2008 à 19:58:54    

Bonjour ,
 
 
Je débute sur Vba et je voudrais écrire une fonction (enfin 2 fcts) une récursive et l'autre itérative nommée sommeDesCarresRec qui renvoie la somme des carrés des entiers compris entre 1 et n  
je n'arrive pas à passer du schema mathematique au programme vba ...  
 
merci de m'aider  
 
Julien  

Reply

Marsh Posté le 23-02-2008 à 19:58:54   

Reply

Marsh Posté le 23-02-2008 à 21:13:27    

Où est la difficulté ?
Relisez votre cours et examinez d'autres fonctions du même genre (par exemple factoriel), et cela vous aidera surement plus que d'avoir la solution toute cuite.

Reply

Marsh Posté le 23-02-2008 à 22:08:46    

billgatesanonym a écrit :

Où est la difficulté ?
Relisez votre cours et examinez d'autres fonctions du même genre (par exemple factoriel), et cela vous aidera surement plus que d'avoir la solution toute cuite.


 
Bonsoir  
 
je n'ai en aucun cas demandé une solution "toute cuite" j'ai simplement voulu savoir davantage sur le fonctionnement de vba et la récursion ....  
 
par contre lorsque j'execute la fonction j'ai ce message : erreur de complilation , nom ambigu detecté  
 
Julien


Message édité par julien1324 le 23-02-2008 à 23:08:31
Reply

Marsh Posté le 24-02-2008 à 10:00:35    

Marrant, d'habitude on a le code du programme mais pas le message d'erreur.
La récursivité est un principe de programmation qui n'est en rien lié à VBA.
Si tu en comprends le principe, il n'y a pas de problème particulier à l'adapter en VBA.
Donne ton code et dis-nous où la compil plante.


Message édité par tegu le 24-02-2008 à 10:01:06
Reply

Marsh Posté le 24-02-2008 à 13:02:04    

bonjour ,  
 
je crois que j'ai compris l'erreur , en fait j'ai changé le nom de ma fonction en sub et ça a marché mais je ne sais pas si c'est correcte :  
 
Function sommeDesCarresRec(ByVal n As Long) As Long
If n > 1 Then
sommeDesCarresRec = n ^ 2 + sommeDesCarresRec(n - 1)
Else
sommeDesCarresRec = n
End If
End Function
 
Sub sommeDesCarresRe()
 
    MsgBox sommeDesCarresRec(5)
     
End Sub
 
Function sommeDesCarres(ByVal n As Long) As Long
Dim i As Long
For i = 1 To n
sommeDesCarres = sommeDesCarres + n ^ 2
Next i
End Function
 
Sub sommeDesCarre()
 
    MsgBox sommeDesCarres(5)
     
End Sub
 
la premiere étant recursive et la seconde itérative .  
Par contre , est ce qu'il existe une maniere de comparer les deux valeurs que les fonctions  renvoient dans les deux versions  (j'ai eu 55 pour la première et 125 pour la deuxieme ) ?  
C'est normal si la deuxieme me renvoie 125, comme c'est les mêmes fonctions à priori ?  
 
Julien


Message édité par julien1324 le 24-02-2008 à 15:45:59
Reply

Marsh Posté le 24-02-2008 à 17:56:16    

Normal, dans la fonction c'est la ligne suivante qui est foireuse

Code :
  1. sommeDesCarres = sommeDesCarres + n ^ 2


il faut y mettre i et non pas n

Code :
  1. sommeDesCarres = sommeDesCarres + i ^ 2

 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed