• 递归转非递归(学习笔记)


    在网上逛的时候发现一篇好文 递归转非递归 ,阅读完,觉得有启发,把重点记录下来,另外作者是用ISO C++语言描述的,我在测试的时候把它改成C#2.0的拉:

    为什么要递归转非递归:
    因为每一次的递归调用都需要压栈占用内存,效率不高.

    递归转非递归的两种方法:
    下面以求n的阶乘来说明
    先给出一般的递归方法:

    递归求阶乘

    非递归方法一:循环法,前提是,待解决问题必须能够分解出可循环规律方可
    而n! = n! = n*(n-1)*(n-2)*....*1;从循环的角度理解就是:n!表示执行n次循环计算一个增量k,初始k=1和结果t=1;每次t乘以k++的值.从而可以得到:
    循环求阶乘

    非递归方法二:自定义堆栈法,目的是为不能分析出来循环的递归操作提供开销可控的方法.如:
    自定义堆栈求阶乘

    说明:以上代码在Visual Studio 2005 Express中测试通过.
  • 相关阅读:
    Django orm self 自关联表
    postgresql数据库导入导出
    celery在项目中的使用
    P3405 [USACO16DEC]Cities and States S 【map使用】
    P1030 求先序排列 【已知中序后序求先序】
    P1305 新二叉树 【寻找根节点进行先序遍历】
    P1229 遍历问题 【已知先序后序求中序种类】
    P1364 医院设置 【带权值的树的重心】
    P3884 [JLOI2009]二叉树问题 【离线tarjan或数的向上遍历】
    P1827 [USACO3.4]美国血统 American Heritage【树的遍历】
  • 原文地址:https://www.cnblogs.com/kwklover/p/369923.html
Copyright © 2020-2023  润新知