递归快还是循环(迭代)快?
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
2.递归调用需要维护活动记录,而迭代直接复用了存储,可以省略这些开销,所以体系结构若执行显式递归调用一般更慢。但这里一般也不会慢多少,主要还是存储空间有压力(调用栈溢出)。
3.但递归是递归,因为as-if rule,实现可以优化掉(最显著的,对符合尾递归形式的代码进行尾调用优化(TCO))不见得就会生成递归调用的代码,所以未必更慢。只不过C艹不像Scheme这样的语言强制要求TCO并且可以关掉优化所以比较容易体现。
顺便,不懂as-if rule的请猛戳这里:http://stackoverflow.com/questions/15718262/what-exactly-is-the-as-if-rule
相关文章推荐
- 迭代 递归 普通循环的区别
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 简单辨析:循环、递归、迭代、遍历
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 斐波那契数列的递归、迭代(循环)、通项公式三种实现
- 循环、迭代、遍历和递归
- 循环(迭代)与递归的区别
- 十步法将递归程序快速转变成迭代或循环程序
- 递归,迭代还是其他?
- 编程中,循环、迭代、遍历和递归之间的区别
- 递归 循环 迭代 遍历
- 循环(迭代)与递归的区别
- 专业术语:迭代、循环、遍历与递归的区别
- 迭代、递归替代循环
- 动态规划和递归、循环、迭代
- 【剑指offer】【斐波那契数列 】递归还是循环
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
- 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别
- Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).