Script par lots - Fonctions récursives

La possibilité d'encapsuler complètement le corps d'une fonction en gardant les changements de variable locaux à la fonction et invisibles pour l'appelant. Nous pouvons maintenant avoir la possibilité d'appeler une fonction de manière récursive en s'assurant que chaque niveau de récursivité fonctionne avec son propre ensemble de variables même si les noms de variables sont réutilisés.

L'exemple suivant montre comment les fonctions récursives peuvent être utilisées.

Exemple

L'exemple montre comment calculer un nombre de Fibonacci de manière récursive. La récursivité s'arrête lorsque l'algorisme de Fibonacci atteint un nombre supérieur ou égal à un nombre d'entrée donné. L'exemple commence par les nombres 0 et 1, la fonction: myFibo s'appelle elle-même récursivement pour calculer le prochain nombre de Fibonacci jusqu'à ce qu'elle trouve le nombre de Fibonacci supérieur ou égal à 1000000000.

Le premier argument de la fonction myFibo est le nom de la variable dans laquelle stocker la sortie. Cette variable doit être initialisée au numéro de Fibonacci pour commencer et sera utilisée comme numéro de Fibonacci courant lors de l'appel de la fonction et sera définie sur le numéro suivant Numéro de Fibonacci lorsque la fonction revient.

@echo off
set "fst = 0"
set "fib = 1"
set "limit = 1000000000"
call:myFibo fib,%fst%,%limit%
echo.The next Fibonacci number greater or equal %limit% is %fib%.
echo.&pause&goto:eof
:myFibo -- calculate recursively
:myFibo -- calculate recursively the next Fibonacci number greater or equal to a limit
SETLOCAL
set /a "Number1 = %~1"
set /a "Number2 = %~2"
set /a "Limit = %~3"
set /a "NumberN = Number1 + Number2"

if /i %NumberN% LSS %Limit% call:myFibo NumberN,%Number1%,%Limit%
(ENDLOCAL
   IF "%~1" NEQ "" SET "%~1 = %NumberN%"
)goto:eof

Production

La commande ci-dessus produit la sortie suivante.

The next Fibonacci number greater or equal 1000000000 is 1134903170.