批處理指令碼 - 遞迴函式



透過讓變數更改區域性於函式並對呼叫方不可見的功能體完全封裝的能力。我們現在可以透過遞迴呼叫函式來確保每一級遞迴與它自己的一組變數一起工作,即使變數名稱正在重新使用。

以下示例展示瞭如何使用遞迴函式。

示例

示例展示瞭如何遞迴計算斐波那契數。當斐波那契演算法達到大於或等於給定輸入數字時,遞迴停止。示例首先開始使用數字 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.
batch_script_functions.htm
廣告