我目前正在尝试为一个项目编写一个批处理文件,以模仿以下伪代码的结构:
void h ( int n )
if ( n ≥ 4 )
h ( n / 2 )
end if
print n
end h
并生成以下输出:
2
4
8
16
当函数给定时16作为输入。
这是迄今为止我最接近的一次:
@ECHO off
SET /A number=%1
IF %number% GEQ 4 (
CALL recursive-36 number/2
REM The following line returns 4, 8, 16.
REM ECHO %number%
)
REM The following line returns 2, 2, 2, 2.
ECHO %number%
但是,无论我将 ECHO %number% 语句放在哪里,我都无法获得 2、4、8、16 作为输出。这是为什么?这是通过引用传递的吗?还是我遗漏了其他什么?
答案1
答案2
@echo off
if not "%~1" == "" (
setlocal enabledelayedexpansion
set "_n=0")else exit /b 1
%:^0
if %~1 geq 4 (
set /a "_n=%~1/2"
echo;!_n! & call %:^0 !_n!
)else endlocal && exit /b 0
- 结果/输出:
- 对于反向输出/结果:
@echo off
if "%~1"=="" (exit /b 1)else set "_n=0"
setlocal enabledelayedexpansion
%:^0
if %~1 geq 4 (
set /a "_n=%~1/2"
call set "_out=!_n!,!_out!"
if !_n! neq %~1 call %:^0 !_n!
exit /b)else for %%i in (!_out!)do echo;%%i
endlocal & exit /b 0
- 输出/结果:
1.你可以将蝙蝠视为一个函数,因为它已经开始接收参数。
2.如果没有传递参数,它会中止/退出,如果传递了任何参数,它会循环使用 if + 调用它处理除法并打印结果...
3. 为了更好地了解如何在 bat 中使用标签/功能处理/操作,请参阅此回答: