批处理脚本 - 递归函数



通过让变量更改局部于函数并对调用方不可见的功能体完全封装的能力。我们现在可以通过递归调用函数来确保每一级递归与它自己的一组变量一起工作,即使变量名称正在重新使用。

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

示例

示例展示了如何递归计算斐波那契数。当斐波那契算法达到大于或等于给定输入数字时,递归停止。示例首先开始使用数字 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
广告