Script por lotes: funciones recursivas
La capacidad de encapsular completamente el cuerpo de una función manteniendo los cambios de variable locales a la función e invisibles para el llamador. Ahora podemos tener la capacidad de llamar a una función de forma recursiva asegurándonos de que cada nivel de recursividad funcione con su propio conjunto de variables, aunque los nombres de las variables se estén reutilizando.
El siguiente ejemplo muestra cómo se pueden utilizar las funciones recursivas.
Ejemplo
El ejemplo muestra cómo calcular un número de Fibonacci de forma recursiva. La recursividad se detiene cuando el algoritmo de Fibonacci alcanza un número mayor o igual a un número de entrada dado. El ejemplo comienza con los números 0 y 1, la función: myFibo se llama a sí misma de forma recursiva para calcular el siguiente número de Fibonacci hasta que encuentra el número de Fibonacci mayor o igual a 1000000000.
El primer argumento de la función myFibo es el nombre de la variable para almacenar la salida. Esta variable debe inicializarse con el número de Fibonacci para comenzar y se usará como número de Fibonacci actual cuando se llame a la función y se establecerá en el siguiente Número de Fibonacci cuando la función regresa.
@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
Salida
El comando anterior produce la siguiente salida.
The next Fibonacci number greater or equal 1000000000 is 1134903170.