中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 14:24
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 【分享】bat递归的"917“新发现
可打印版本  1,432 / 14
第1楼 plp626 发表于 2009-04-10 14:09
银牌会员 发帖 1,020 积分 2,278
【分享】bat递归的"917“新发现
命令行下键入



以下代码保存为f.bat


[ Last edited by plp626 on 2009-4-10 at 14:11 ]
第2楼 yishanju 发表于 2009-04-10 17:23
银牌会员 发帖 1,357 积分 1,488
真不敢运行
话说高人的代码向人来高深莫测
第3楼 knoppix7 发表于 2009-04-10 22:20
银牌会员 发帖 634 积分 1,287 来自 cmd.exe
来回Call的话就会这样.

Call有限制的..
第4楼 Pierre 发表于 2009-04-11 01:11
初级用户 发帖 19 积分 30
H:\Documents and Settings\Pierre>f 1000 ans
****** B A T C H R E C U R S I O N exceeds STACK limits ******
Recursion Count=619, Stack Usage=90 percent
****** B A T C H PROCESSING IS A B O R T E D ******
第5楼 Pierre 发表于 2009-04-11 01:14
初级用户 发帖 19 积分 30
620就超出了,看来最多619
而实际上超过33就不能算了,而32和33都是-2147483648
第6楼 chenall 发表于 2009-04-11 05:22
银牌会员 发帖 469 积分 1,276 来自 福建泉州
由于CMD下
数字精确度限为 32 位.
所以最多到33就不能计算了,超出最大值.
第7楼 plp626 发表于 2009-04-11 07:55
银牌会员 发帖 1,020 积分 2,278
Originally posted by Pierre at 2009-4-11 01:14 AM:
620就超出了,看来最多619
而实际上超过33就不能算了,而32和33都是-2147483648


你这是个什么系统,怎么会是619呢?


****** 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 ******
第8楼 不得不爱 发表于 2009-04-12 07:55
超级版主 发帖 2,044 积分 5,310 来自 四川南充
Originally posted by Pierre at 2009-4-11 01:14:
620就超出了,看来最多619
而实际上超过33就不能算了,而32和33都是-2147483648

我也是递归到917就后就报错了


而上面的计算方法中n!结算到 13!就已经溢出了,超过12阶后计算出来的都是错误的!
第9楼 不得不爱 发表于 2009-04-12 08:14
超级版主 发帖 2,044 积分 5,310 来自 四川南充
我刚才试了下递归层数好像还跟什么有关系,如下面的


****** B A T C H R E C U R S I O N exceeds STACK limits ******
Recursion Count=1240, Stack Usage=90 percent
****** B A T C H PROCESSING IS A B O R T E D ******

说明最大递归次数是1240

[ Last edited by 不得不爱 on 2009-4-12 at 08:19 ]
第10楼 freeants001 发表于 2009-04-12 09:00
中级用户 发帖 244 积分 330 来自 湖北
****** 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 ******
917;)
第11楼 plp626 发表于 2009-04-12 10:48
银牌会员 发帖 1,020 积分 2,278
Originally posted by 不得不爱 at 2009-4-12 07:55 AM:

我也是递归到917就后就报错了


而上面的计算方法中n!结算到 13!就已经溢出了,超过12阶后计算出来的都是错误的!


我只是举了个递归简单的例子,超过13当然作为阶乘的结果都是错误的
其实在cmd里没有溢出一说,他只是循环移位,不管数值范围。



这个例子更简洁,好!

不过也不知道为什么是1240了
第12楼 Pierre 发表于 2009-04-12 13:57
初级用户 发帖 19 积分 30
2003 r2 ent x64
第13楼 everest79 发表于 2009-04-12 22:20
金牌会员 发帖 1,127 积分 2,564
阀值应是2480吧
递归有进有出的
这应跟线程的页面文件或内存分配有关
第14楼 523066680 发表于 2009-10-14 20:04
银牌会员 发帖 1,133 积分 2,362
啥? 我的这样
****** B A T C H R E C U R S I O N exceeds STACK limits ******
Recursion Count=1240, Stack Usage=90 percent
****** B A T C H PROCESSING IS A B O R T E D ******
第15楼 523066680 发表于 2009-10-14 20:07
银牌会员 发帖 1,133 积分 2,362
有一个好像可以超越call层次的方法
建立一个xxx.bat

代码为

好像返回的时候环境不能恢复……多此一举了

[ Last edited by 523066680 on 2009-10-14 at 20:44 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023