为什么一些公司禁止编程中使用递归调用?

鬼族AND魅 2014-03-02 11:28:35

才听说有公司禁止编程过程中使用递归调用,刚才百度一下,说是递归会影响到数据安全,可有详细解释?
PS:本人学生党 初学者
...全文
1431 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2014-03-06
  • 打赏
  • 举报
回复
引用 17 楼 zilaishuichina 的回复:
递归说白了,还是函数调用,只不过调用的是自己(包括间接调用自己,比如A调B,B调A) 有函数调用就有,函数地址,函数参数,函数返回值,的压栈出栈 这个栈说白了还是一块内存,windows好像是1M,Linux好像是10M,当然你可以手动配置,但是毕竟这块内存大小是有限制的,你不能无限的一直函数调用下去,栈内存用完了,就会覆盖到程序的其他的内存里面去了,这就是溢出 禁止编程过程中使用递归,可能主要是防止程序员代码不严谨,递归出口设置的不合理,导致递归无法终止,造成无限递归,最终栈溢出
学习了,谢谢
昵称很不好取 2014-03-06
  • 打赏
  • 举报
回复
能简单解决问题的方法就是好方法,哪有那么多限制
jiandingzhe 2014-03-06
  • 打赏
  • 举报
回复
我记得栈比较小,而且很多环境下栈是有大小限制的。
threenewbee 2014-03-06
  • 打赏
  • 举报
回复
小白太多,真懒得说了。
threenewbee 2014-03-06
  • 打赏
  • 举报
回复
引用 14 楼 u013807437 的回复:
[quote=引用 11 楼 truelance 的回复:] 因为递归在边界条件保护不足的情况下会产生堆栈溢出,而堆栈溢出是一种最常用的黑客攻击手段。 所以安全性较高的行业软件都对递归的使用有一些限制。
堆栈溢出又是一个新概念了 还得去继续查资料[/quote] 堆栈溢出不是“黑客攻击手法”,黑客攻击手法是缓冲区溢出,然后污染堆栈。
真相重于对错 2014-03-06
  • 打赏
  • 举报
回复
一切递归都可以转为无递归!
PDD123 2014-03-06
  • 打赏
  • 举报
回复
递归的层数过多的话,会造成堆栈溢出
鬼族AND魅 2014-03-06
  • 打赏
  • 举报
回复
引用 27 楼 zhao4zhong1 的回复:
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
学习了 谢谢
鬼族AND魅 2014-03-06
  • 打赏
  • 举报
回复
引用 26 楼 thefirstz 的回复:
能简单解决问题的方法就是好方法,哪有那么多限制
我也觉得是 不过据说是有这样的规定 所以才疑惑
赵4老师 2014-03-06
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
江湖的传说 2014-03-05
  • 打赏
  • 举报
回复
还不知道有这个规定呢,学习学习
ojc520520 2014-03-05
  • 打赏
  • 举报
回复
学习学习
鬼族AND魅 2014-03-05
  • 打赏
  • 举报
回复
引用 17 楼 zilaishuichina 的回复:
递归说白了,还是函数调用,只不过调用的是自己(包括间接调用自己,比如A调B,B调A) 有函数调用就有,函数地址,函数参数,函数返回值,的压栈出栈 这个栈说白了还是一块内存,windows好像是1M,Linux好像是10M,当然你可以手动配置,但是毕竟这块内存大小是有限制的,你不能无限的一直函数调用下去,栈内存用完了,就会覆盖到程序的其他的内存里面去了,这就是溢出 禁止编程过程中使用递归,可能主要是防止程序员代码不严谨,递归出口设置的不合理,导致递归无法终止,造成无限递归,最终栈溢出
学习了 谢谢
zilaishuichina 2014-03-04
  • 打赏
  • 举报
回复
递归说白了,还是函数调用,只不过调用的是自己(包括间接调用自己,比如A调B,B调A) 有函数调用就有,函数地址,函数参数,函数返回值,的压栈出栈 这个栈说白了还是一块内存,windows好像是1M,Linux好像是10M,当然你可以手动配置,但是毕竟这块内存大小是有限制的,你不能无限的一直函数调用下去,栈内存用完了,就会覆盖到程序的其他的内存里面去了,这就是溢出 禁止编程过程中使用递归,可能主要是防止程序员代码不严谨,递归出口设置的不合理,导致递归无法终止,造成无限递归,最终栈溢出
unmapped 2014-03-04
  • 打赏
  • 举报
回复
《代码大全》(<CC2>) 第17章, 17.2谈递归。 17.3谈goto; 常见的教条主义者,言必称“递归的好处”,反对“禁用递归”... 或者教条主义者,谈goto色变,一朝被蛇咬十年怕goto.... 递归, 要确认递归能停止(安全计数器防止无穷递归等...) 把递归限制在一个子程序内(出现跨越多个函数的敌对调用,恐怕人脑都难以理解) stack栈空间不够了,栈溢出... 糟糕的算法,比如像用递归去算阶乘或斐波那契数列等
majia2011 2014-03-04
  • 打赏
  • 举报
回复
再来个新概念,如果是大规模的计算,编译器是没法帮你优化的,呵呵呵
鬼族AND魅 2014-03-04
  • 打赏
  • 举报
回复
引用 11 楼 truelance 的回复:
因为递归在边界条件保护不足的情况下会产生堆栈溢出,而堆栈溢出是一种最常用的黑客攻击手段。 所以安全性较高的行业软件都对递归的使用有一些限制。
堆栈溢出又是一个新概念了 还得去继续查资料
木有童年 2014-03-04
  • 打赏
  • 举报
回复
不同行业不同吧,有些嵌入式软件安全性要求高吧。 详见:SIL等级认证。 http://baike.baidu.com/link?url=zpaHY2wxHeXvDvROJIjmz5FpOyNICVRDqfcptz4Taf03e5PuW5SXQrJ21lqYGlhtsXsdtJJkkIUX71Z6whmWeK 标准EN 50128.
mangoalx 2014-03-03
  • 打赏
  • 举报
回复
无节制的递归会造成堆栈溢出吧
derekrose 2014-03-03
  • 打赏
  • 举报
回复
加载更多回复(10)

33,316

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧