标题: [特效代码] 用goto实现的递归-生成n进制数 [打印本页]
作者: a20150604 时间: 2017-4-12 14:12 标题: 用goto实现的递归-生成n进制数
批处理用 call 很容易实现递归, 但速度会很慢
用 goto 实现递归, 需要自行建立各种堆栈, 在适当时操作压栈, 弹栈
本例 用 goto 生成 若干位的 n进制数, 位数和进制都是可调的
本例生成4位的所有三进制数, 从 0000 到 2222 相当于10进制的 0 -- 80[3^4-1], 数字序列如下:- 0000, 0001, 0002, 0010, 0011, 0012, 0020, 0021, 0022, 0100, 0101, 0102, 0110, 0111, 0112, 0120, 0121, 0122, 0200, 0201, 0202, 0210, 0211, 0212, 0220, 0221, 0222, 1000, 1001, 1002, 1010, 1011, 1012, 1020, 1021, 1022, 1100, 1101, 1102, 1110, 1111, 1112, 1120, 1121, 1122, 1200, 1201, 1202, 1210, 1211, 1212, 1220, 1221, 1222, 2000, 2001, 2002, 2010, 2011, 2012, 2020, 2021, 2022, 2100, 2101, 2102, 2110, 2111, 2112, 2120, 2121, 2122, 2200, 2201, 2202, 2210, 2211, 2212, 2220, 2221, 2222
复制代码
- @echo off & setlocal enabledelayedexpansion
- REM 初始状态
- set /a bitind=4, istep=-1
- :enter
- if !bitind! leq 0 (
- echo;!B4!!B3!!B2!!B1!
- set /a "bitind=!bitindSt:~-1!, istep=!istepSt:~-1!"
- set "bitindSt=!bitindSt:~0,-1!
- set "istepSt=!istepSt:~0,-1!
- goto :enter
- ) else (
- if !istep! lss 2 (
- set /a "istep+=1"
- set "B!bitind!=!istep!"
- set "bitindSt=!bitindSt!!bitind!"
- set "istepSt=!istepSt!!istep!"
- set /a "bitind-=1, istep=-1"
- goto :enter
- ) else (
- if "!bitindSt!"=="" (
- goto :complete
- ) else (
- set /a "bitind=!bitindSt:~-1!, istep=!istepSt:~-1!"
- set "bitindSt=!bitindSt:~0,-1!
- set "istepSt=!istepSt:~0,-1!
- goto :enter
- )
- )
- )
- :complete
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |