Poursuivons notre tour d'horizon des grands classiques proposés lors de l'apprentissage de la programmation informatique. L'appel de fonctions (et) ou de procédures est évidement un sujet particulièrement important puisqu'il touche à l'architecture même des programmes. Rapidement on en vient à parler des fonctions récursives, souvent la bête noire des apprentis programmeurs.
En informatique, une fonction est dite récursive si le calcul nécessite d'invoquer la fonction elle même.
Récursivité donc incontournable pour assurer le calcul de la factorielle d'un entier naturel n.
La factorielle de n (notée n!) est le produit des nombres entiers strictement positif inférieur ou égaux à n.
Exemple 4! = 4 * 3 * 2 * 1 - Nous posons bien sur 0! = 1 -
Peut on résoudre ce probléme en VBA par un appel récursif de type ?
Fonction factorielle (n)Si n > 1Renvoyer n * factorielle(n - 1)SinonRenvoyer 1Fin siFin fonction
Voici un code très simple permettant de répondre par l'affirmatif, attention toutefois à la croissance exponentielle de l'algorithme.
Option Explicit
'****************************
Function Factorielle(ByVal x As Integer) As Long
'ne pas oublier le type de données de la fonction
If x = 0 Then
Factorielle = 1
Else
Factorielle = Factorielle(x - 1) * x
' et voici l'appel récursif
End If
End Function
'**************************************
Sub depart2()
Dim n As Integer
Dim resultat As Long
n = InputBox("Entrez un entier n = ", "Factorielle", 0)
Range("d1").Value = n
resultat = Factorielle(n) 'appel de la fonction
'et récupération du résultat
Range("e1").Value = resultat
End Sub
Bien sur Excel intègre déjà une fonction = FACT( ), mais vous en conviendrez ce n'est pas le même plaisir....
A la semaine prochaine...
0 commentaires:
Enregistrer un commentaire