通過在函數中保持局部變數的變化並且對調用者不可見,完全封裝函數主體的能力。 我們現在可以遞歸地調用一個函數,確保每個級別的遞歸都可以使用自己的一組變數,即使變數名被重用。
下麵的例子展示了如何使用遞歸函數。
示例
這個例子展示了如何遞歸地計算一個斐波那契數。 當斐波那契演算法達到一個大於或等於給定輸入數的數時,遞歸停止。 該示例以數字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.