递归模拟

  递归算法, 真是一个解决问题最为直白的算法, 但是,递归如果不进行一番转换的话, 直接进行递归编码的话, 真的要命, 至少, 现在, 我的电脑就消耗不了, 因为, 不断的递归, 意味着, 你内存空间中, 不断的建立栈空间, 少数还好说, 可是, 再ACM上大多数都是那种非常大的数字。

  因此, 递归需要非递归模拟。

  再模拟之前, 我想说, 有时候, 递归真的执行效率很高, 当O为log级别的, 基本上用递归, 就可以实现, 举个例子, 二分查找法, 10亿个数, 估算了一下,  递归的次数不过50次,总之, 很划算, 递归也不是一无是处。 下面开始我们的递归模拟。

  迭代模拟:

    任何一种递归都可以使用迭代实现, 我们可以使用数组, 例如:在求解斐波那契额列的时候, 使用一个很大的数组来保存元素, 不断的进行相加, 代码从略。

  数学模拟

    递归, 是什么, 不就是我们所说的递推公式, 既然是递推公式, 我们就很有可能求出其通项公式, 比如错分排列就可以求出其通项公式, 其递推公式为

              M(n)=(n-1)[M(n-2)+M(n-1)]

    得到的通项公式为:

              M(n)=n!(1/2!-1/3!+…..+(-1)^n/n!)(具体请参见百度百科的”错排公式“)

  

  好了, 以上是我个人对递推公式的理解, 如果有其他的模拟方式, 还请补充(此篇待完善)

posted @ 2012-07-31 20:40  黑色包裹  阅读(192)  评论(0编辑  收藏  举报