批处理脚本 - 递归函数

通过将变量更改保持在函数本地并且对调用者不可见来完全封装函数体的能力。 我们现在可以递归地调用函数,确保每个级别的递归都可以使用自己的变量集,即使变量名称被重用也是如此。

以下示例展示了如何使用递归函数。

示例

该示例展示了如何递归计算斐波那契数。 当斐波那契算法达到大于或等于给定输入数字的数字时,递归停止。 该示例从数字 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.html