标题: [其他] 【分享】批处理递归的“917”发现 [打印本页]
作者: plp626 时间: 2009-4-11 01:09 标题: 【分享】批处理递归的“917”发现
****** B A T C H R E C U R S I O N exceeds STACK limits ******
Recursion Count=917, Stack Usage=90 percent
****** B A T C H PROCESSING IS A B O R T E D ******
命令行下键入
复制代码
以下代码保存为f.bat
- :f //求%1的阶乘 [integer] [%2]
- @set/a n=%1-1
- @if %1==0 (set/a %2=1) else (call:f %n% m&set/a %2=%1*m)
复制代码
作者: zqz0012005 时间: 2009-4-11 16:34
堆栈溢出。研究%0时分析过。不过没有发现便于应用的地方。堆栈溢出会导致整个bat直接退出,后面的语句无法运行。
单就你这个计算阶乘来说,还要受到set /a 能处理的数的范围(-2^31~2^31-1)约束。
计算1000的阶乘是不行的。
倒是其中的延迟处理(先展开所有call语句,再依次运行set命令)有点意思。
作者: zqz0012005 时间: 2009-5-7 17:26
并非总是917
****** B A T C H R E C U R S I O N exceeds STACK limits ******
Recursion Count=1101, Stack Usage=90 percent
****** B A T C H PROCESSING IS A B O R T E D ******
- @echo off
- call :loop
- pause&exit/b
- :loop
- set /a n+=1
- if %n% lss 9999 call :loop
- echo %n%
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |