您的位置:首页 > 其它

递归快还是循环(迭代)快?

2014-08-18 09:49 309 查看
1.算法抽象上所谓的循环(更准确点说,叫做迭代——顺便,C艹有的是“迭代语句”而不是“循环语句”)是递归的特例。写成循环的东西能直接转写成递归形式,反过来就得自己造活动记录了(例如栈)。
2.递归调用需要维护活动记录,而迭代直接复用了存储,可以省略这些开销,所以体系结构若执行显式递归调用一般更慢。但这里一般也不会慢多少,主要还是存储空间有压力(调用栈溢出)。
3.但递归是递归,因为as-if rule,实现可以优化掉(最显著的,对符合尾递归形式的代码进行尾调用优化(TCO))不见得就会生成递归调用的代码,所以未必更慢。只不过C艹不像Scheme这样的语言强制要求TCO并且可以关掉优化所以比较容易体现。

顺便,不懂as-if rule的请猛戳这里:http://stackoverflow.com/questions/15718262/what-exactly-is-the-as-if-rule
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: