作为C++的新手,我想知道在使用递归时是否有特定的事情需要考虑,因为与Python,Java和/或函数语言等语言相比,语言的特异性和低级别性.
另外,我想知道各种编译器在处理递归方面是否存在很多差异(特别是关于尾递归).我目前在CodeBlocks和VS2010上使用gcc.
C++中的递归应该绑定,而不是非常深入 - 特别是当您的实现能够创建非常重要的堆栈分配时.如果您的程序不符合这些要求,那么您应该采用另一种方法(例如迭代).
每个函数调用都需要一些堆栈存储,而您的函数参数也需要堆栈存储.您获得多少堆栈存储取决于您的实现/环境.现代桌面系统通常不会给你超过几MB.其他实现将为您提供更少的功能.
如果您的调用超出了线程堆栈的边界,那么您将获得堆栈溢出.
有一些优化可以消除递归函数中的嵌套调用,但是你的实现不应该依赖于这种行为,因为它是不安全的(例如,在更新编译器,更改构建设置或代码库之后可能不再执行优化)进化).
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |