在批处理文件中调用递归函数

在批处理文件中调用递归函数

我目前正在尝试为一个项目编写一个批处理文件,以模仿以下伪代码的结构:

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

这个批量递归算法可以写成这样:

@echo off
setlocal EnableDelayedExpansion
set /A number=16
echo %number%
call :recursive
goto :eof

:recursive
if %number% gtr 2 (
  set /A number/=2
  echo %number%
  call :recursive
)
exit /b

参考 :

答案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 中使用标签/功能处理/操作,请参阅此回答

相关内容