Board logo

标题: [其他] 【分享】批处理递归的“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      ******



命令行下键入
  1. f 1000 ans
  2. echo %ans%
复制代码




以下代码保存为f.bat
  1. :f //求%1的阶乘 [integer] [%2]
  2. @set/a n=%1-1
  3. @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      ******
  1. @echo off
  2. call :loop
  3. pause&exit/b
  4. :loop
  5. set /a n+=1
  6. if %n% lss 9999 call :loop
  7. echo %n%
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2