Batch-script-recursive-functions

提供:Dev Guides
移動先:案内検索

バッチスクリプト-再帰関数

変数の変更を関数のローカルに保持し、呼び出し元には見えないようにすることで、関数の本体を完全にカプセル化する機能。 変数名が再利用されている場合でも、再帰の各レベルが独自の変数セットで機能するように、関数を再帰的に呼び出すことができます。

次の例は、再帰関数の使用方法を示しています。

この例は、フィボナッチ数を再帰的に計算する方法を示しています。 フィボナッチアルゴリズムが指定された入力数以上の数に達すると、再帰が停止します。 この例は数字の0と1で始まり、:myFibo関数は、1000000000以上のフィボナッチ数を見つけるまで、次のフィボナッチ数を計算するためにそれ自体を再帰的に呼び出します。

myFibo関数の最初の引数は、出力を保存する変数の名前です。 この変数は、最初にフィボナッチ数に初期化する必要があり、関数を呼び出すときに現在のフィボナッチ数として使用され、関数が戻るときに後続のフィボナッチ数に設定されます。

@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

出力

上記のコマンドは、次の出力を生成します。

The next Fibonacci number greater or equal 1000000000 is 1134903170.