VBA : La suite de Fibonacci



Poursuivons sur le thème de la semaine dernière, à savoir l'utilisation des fonctions récursives en VBA. Un autre exemple incontournable en algorithmie se trouve dans la suite de Fibonacci, un mathématicien italien du 13éme siècle.
Il s'agit d'une suite d'entier dans laquelle chaque terme est le somme des deux termes qui le précédent. Si on démarre la suite en posant F(0) = 0 et F(1)  = 1, le reste de la suite s'écrira : 

F(n) = F(n-1) + F(n-2)

De quoi écrire une belle fonction récursive de type :


fonction fibo(n)
si (n ≤ 1)
  retourner n 
sinon 
  retourner fibo(n - 1) + fibo(n - 2)
fin de la fonction
 
Voici sa traduction en VBA, ici on saisira un nombre entier dans la cellule F1 de la feuille de
calcul, et Excel, enrichie de cette nouvelle fonction retournera le résultat en  E7.
 
Function fibonacci(ByVal n As Integer) As Long
If n <= 0 Then
'definition de F(0) et F(1)
    fibonacci = 0
    Else
        If n = 1 Then
            fibonacci = 1
        Else
        'recurence à partir du rang 2
            fibonacci = fibonacci(n - 1) + fibonacci(n - 2)
        End If
    End If
End Function
 
Toutefois la récursivité ne s’avère pas toujours, la méthode de calcul la plus rapide, 
aussi voici un algorithme plus linéaire dans l’hypothèse de la manipulation de grand nombres.

Sub Debut()
    Dim x As Byte
    x = InputBox("entrez un entier n = ", "", 0)
    fibonacci x
End Sub
'***************************************
Function fibo(ByVal n As Byte) As Integer
Dim f1 As Integer
Dim f2 As Integer
Dim i As Byte
    Select Case n
        Case 0
            fibo = 0
        Case 1, 2
            fibo = 1
        Case Else
            f1 = 1
            f2 = 1
            For i = 3 To n
                fibo = f2 + f1
                f2 = f1
                f1 = fibo
            Next i
   End Select
   MsgBox "F " & n & " = " & fibo, vbOKOnly + vbCritical, "Fibonacci"
End Function
 
 
 




0 commentaires:

Enregistrer un commentaire

top