zoukankan      html  css  js  c++  java
  • 递归快还是循环(迭代)快?

    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

  • 相关阅读:
    TDengine社区版
    进程&线程
    I2总线
    S3C2440的GPIO编程
    NPN&PNP
    旁路电容和去耦电容
    战胜C语言中令人头疼的问题
    今天神经有点大。。
    JZs3c2440裸板程序GPIO操作总结
    JZs3c2440学习笔记一
  • 原文地址:https://www.cnblogs.com/foohack/p/3918826.html
Copyright © 2011-2022 走看看