zoukankan      html  css  js  c++  java
  • 递归 尾递归 迭代 递推 的比较--算法课第一次作业

    算法课第一次作业:递归 尾递归 迭代 递推 的比较

     

    定义

    优点

    缺点

    demo

    递归

    程序调用自身的编程技巧称为递归

    1)大问题化为小问题,可以极大的减少代码量;

    2)用有限的语句来定义对象的无限集合.;

    3)代码更简洁清晰,可读性更好

    1)递归调用函数,浪费空间;

    2)递归太深容易造成堆栈的溢出

    上面的汉诺塔

    】】】

    】】】】】】

    ...

    】】】】】】】】】

    】】】】】】】】】】】

    】】】】】】】】】

    ...

    】】】】】】

    】】】

    迭代

    利用变量的原值推算出变量的一个新值,迭代就是A不停的调用B.

    1)迭代效率高,运行时间只因循环次数增加而增加;

    2)没什么额外开销,空间上也没有什么增加,

    1) 不容易理解;

    2) 代码不如递归简洁;

    3) 编写复杂问题时困难。

    】】】

    】】】

    】】】

    】】】

    ...

    】】】

    递推

    递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法

    递推算法免除了数据进出栈的过程,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值. 

    递推的精髓在于f(n)的结果一般由f(n-1)、f(n-2)…..f(n-k)的前k次结果推导出来

    不容易从简单而特殊的案例,找到问题的一般规律,写出f(n)与f(n-1)、f(n-2)…..f(n-k)之间的关系表达式,从而得出求解的结果

    课本陈惠南算法书第26页

    尾递归

    递归函数return语句是自身的函数

    类似迭代: 占据恒量的内存

    同上迭代

    function story() {

    从前有座山,山上有座庙,

    庙里有个老和尚,

    一天和尚对小和尚讲故事:story()

    }

        

  • 相关阅读:
    安装ArcGIS Desktop 9.3后,Windows 7的“打开或关闭Windows功能”对话框成了一片空白
    ubuntu安装锐捷客户端
    jsp中文乱码的问题
    C#操作MySQL时,出现的中文乱码的解决方案
    Jena读取Restriction
    MySQL导入Access数据
    No identifier specified for entity: main.java.com.sy.entity.User
    基于注解的Spirng MVC框架的搭建(基础篇)
    解决jQuery版本冲突的方法
    Sybase数据库的连接,JNDI,Hibernate配置
  • 原文地址:https://www.cnblogs.com/liguo-wang/p/8757918.html
Copyright © 2011-2022 走看看