Reccursivité pour le calcul d'une factorielle

Bonjour , j 'ai tenté de calculer une factorielle d'un entier par deux façon d’écrire mon code :

Function recc(n As Integer) As Integer
z = z * n
n = n - 1
If n <> 1 Then
recc n
Else
 MsgBox z
End If
End Function

Sub try()
z = 1
 recc 5
End Sub

là ca marche par contre avec cette seconde facon :

Function recc(n As Integer) As Integer
z = z * n
n = n - 1
If n <> 1 Then
recc n
Else
 recc = z
End If
End Function

Sub try()
z = 1
MsgBox recc(5)
End Sub

en mode pas à pas j'arrive sur la ligne recc= z ou j'ai bien 120 qui est la resultat attendu ensuite le compilateur fait des aller retour entre "end if" et "end function " et ma valeur

recc est perdu et devient 0 , je n'arrive pas à me l'expliquer , ou alors est une facon de coder qui n'est pas la bonne ?

Merci pour toute suggestions .

Cordialement

bonjour,

ton code revu

Dim z
Function recc1(n As Integer) As Integer
    z = z * n
    n = n - 1
    If n <> 1 Then
        recc1 n
    Else
        MsgBox z
    End If
End Function

Function recc(n As Long) As Long
    If n > 1 Then recc = n * recc(n - 1) Else recc = 1
End Function

Function recc2(n As Integer) As Integer
    z = z * n
    n = n - 1
    If n <> 1 Then
        recc2 = recc2(n)
    Else
        recc2 = z
    End If
End Function

Sub try()
    z = 1
    recc1 5
    z = 1
    MsgBox recc2(5)
    MsgBox recc(5)
End Sub

ta première fonction retourne bien le résultat car ton résultat est dans une variable globale z que tu affiches quand la récurrence est terminée, par contre dans ta 2ème fonction, le résultat final est bien dans z, mais tu ne renvoies pas cette valeur comme résultat de la fonction (tu ne le fais que lorsque n=1, mais pas pour les autres valeurs de n)

je t'ai ajouté une autre version (sans variable z), En définissant les variables as long, tu peux calculer les factorielles de 1 à 12

Merci infiniment H2So4 pour ces précieux conseils , 'j'en prend note

Rechercher des sujets similaires à "reccursivite calcul factorielle"