递归说白了,还是函数调用,只不过调用的是自己(包括间接调用自己,比如A调B,B调A) 有函数调用就有,函数地址,函数参数,函数返回值,的压栈出栈 这个栈说白了还是一块内存,windows好像是1M,Linux好像是10M,当然你可以手动配置,但是毕竟这块内存大小是有限制的,你不能无限的一直函数调用下去,栈内存用完了,就会覆盖到程序的其他的内存里面去了,这就是溢出 禁止编程过程中使用递归,可能主要是防止程序员代码不严谨,递归出口设置的不合理,导致递归无法终止,造成无限递归,最终栈溢出
[quote=引用 11 楼 truelance 的回复:] 因为递归在边界条件保护不足的情况下会产生堆栈溢出,而堆栈溢出是一种最常用的黑客攻击手段。 所以安全性较高的行业软件都对递归的使用有一些限制。
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
能简单解决问题的方法就是好方法,哪有那么多限制
因为递归在边界条件保护不足的情况下会产生堆栈溢出,而堆栈溢出是一种最常用的黑客攻击手段。 所以安全性较高的行业软件都对递归的使用有一些限制。
33,316
社区成员
41,771
社区内容
加载中
试试用AI创作助手写篇文章吧