通过在函数中保持局部变量的变化并且对调用者不可见,完全封装函数主体的能力。 我们现在可以递归地调用一个函数,确保每个级别的递归都可以使用自己的一组变量,即使变量名被重用。
下面的例子展示了如何使用递归函数。
示例
这个例子展示了如何递归地计算一个斐波那契数。 当斐波那契算法达到一个大于或等于给定输入数的数时,递归停止。 该示例以数字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.