批次處理遞回函式

2019-10-16 22:59:14

通過在函式中保持區域性變數的變化並且對呼叫者不可見,完全封裝函式主體的能力。 我們現在可以遞回地呼叫一個函式,確保每個級別的遞迴都可以使用自己的一組變數,即使變數名被重用。

下面的例子展示了如何使用遞回函式。

範例

這個例子展示了如何遞回地計算一個斐波那契數。 當斐波那契演算法達到一個大於或等於給定輸入數的數時,遞回停止。 該範例以數位01開頭,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.