Script em lote - funções recursivas
A capacidade de encapsular completamente o corpo de uma função, mantendo as alterações de variáveis locais para a função e invisíveis para o chamador. Agora podemos ter a capacidade de chamar uma função recursivamente, garantindo que cada nível de recursão funcione com seu próprio conjunto de variáveis, mesmo que os nomes das variáveis estejam sendo reutilizados.
O exemplo a seguir mostra como as funções recursivas podem ser usadas.
Exemplo
O exemplo mostra como calcular um número de Fibonacci recursivamente. A recursão para quando o algoritmo de Fibonacci atinge um número maior ou igual a um determinado número de entrada. O exemplo começa com os números 0 e 1, a função: myFibo chama a si mesma recursivamente para calcular o próximo número de Fibonacci até encontrar o número de Fibonacci maior ou igual a 1000000000.
O primeiro argumento da função myFibo é o nome da variável para armazenar a saída. Esta variável deve ser inicializada com o número de Fibonacci para começar e será usada como número de Fibonacci atual ao chamar a função e será definida para o próximo Número de Fibonacci quando a função retorna.
@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
Resultado
O comando acima produz a seguinte saída.
The next Fibonacci number greater or equal 1000000000 is 1134903170.