[B]Function factorielle_roger2(n As Integer) As Double
If n > 1 Then[/B]
[COLOR="SeaGreen"]'[U]La ligne qui suit appelle factorielle_roger2[/U] (avec le paramètre n-1
'au lieu de n) [U]avant de pouvoir s'exécuter[/U] :
'Il arrivera un moment où elle appelera factorielle_roger2(1).[/COLOR]
[B]factorielle_roger2 = n * factorielle_roger2(n - 1)[/B] [COLOR="SeaGreen"]'***[/COLOR]
[B]Else[/B]
[COLOR="SeaGreen"]'Lorsque n=1, cette ligne est exécutée. À cet instant, factorielle_roger2
'prend la valeur 1.[/COLOR]
[B]factorielle_roger2 = 1
End If[/B]
[COLOR="SeaGreen"]'La fonction semble se terminer ici et [U]on pourrait craindre[/U]
'[U]qu'elle renvoyât toujours 1[/U].
'C'est vrai pour n=1, mais [U]comme cette fonction a été appelée n fois,[/U]
'[U]chaque appel doit se terminer. Elle devra donc se terminer n fois[/U].
'Elle va donc se terminer pour n=2, en renvoyant le calcul de
'la ligne marquée '***.
'Avec n=2, factorielle_roger2 prend la valeur n * factorielle_roger2(n - 1), i.e
'en remplaçant n par 2 : 2 * factorielle_roger2(1) soit 2*1=2.
'Puis elle se termine pour n=3 en donnant 3 * factorielle_roger2(2) soit 3*2=6.
'Puis elle se termine pour n=4 en donnant 4 * factorielle_roger2(3) soit 4*6=24.
'...et ainsi de suite jusqu'à atteindre la valeur passée au paramètre n.[/COLOR]
[B]End Function[/B]