Script batch - Funzioni ricorsive

La capacità di incapsulare completamente il corpo di una funzione mantenendo le modifiche delle variabili locali alla funzione e invisibili al chiamante. Ora possiamo avere la possibilità di chiamare una funzione in modo ricorsivo assicurandoci che ogni livello di ricorsione funzioni con il proprio insieme di variabili anche se i nomi delle variabili vengono riutilizzati.

L'esempio seguente mostra come utilizzare le funzioni ricorsive.

Esempio

L'esempio mostra come calcolare ricorsivamente un numero di Fibonacci. La ricorsione si interrompe quando l'algoritmo di Fibonacci raggiunge un numero maggiore o uguale a un dato numero di input. L'esempio inizia con i numeri 0 e 1, la funzione: myFibo chiama se stessa in modo ricorsivo per calcolare il numero di Fibonacci successivo finché non trova il numero di Fibonacci maggiore o uguale a 1000000000.

Il primo argomento della funzione myFibo è il nome della variabile in cui memorizzare l'output. Questa variabile deve essere inizializzata con il numero di Fibonacci per iniziare e verrà utilizzata come numero di Fibonacci corrente quando si chiama la funzione e sarà impostata sul numero successivo Numero di Fibonacci quando la funzione ritorna.

@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

Produzione

Il comando precedente produce il seguente output.

The next Fibonacci number greater or equal 1000000000 is 1134903170.