课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 昆明Java培训分享:Java递归与非递归算法详解
  • 昆明Java培训分享:Java递归与非递归算法详解

    发布:达内科技      来源:达内昆明      时间:2015-10-26

  • 作为编程语言,对于算法的学习很重要,对你昆明Java培训就介绍一下递归与非递归算法之间的一些区别与转化,希望对你有帮助。

    非递归:非递归是采用循环(最好是循环迭代)或者栈的方式来遍历,效率高。

    递归:在过程或函数里调用自身,必须有递归结束条件(递归出口),程序思路清晰,可读性强。由于递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

    达内昆明Java培训认为,递归和非递归的效率应该和递归的深度有很大关系,当递归调用次数很多时,函数调用的额外开支必须要考虑。

    很多时候建议将将递归算法转换为非递归算法。一般有以下三种方法。

    (1) 通过分析,跳过分解过程,直接用循环结构的算法实现求解过程。

    (2).自己用栈模拟系统的运行时栈,通过分析只保存必须保存的信息,从而用非递归算法替代递归算法。

    (3).利用栈保存参数,由于栈的后进先出特性吻合递归算法的执行过程,因而可以用非递归算法替代递归算法。

    昆明java培训

    递归原理: 用栈保存未完成的工作,在适当的时候从栈中取出并执行。 系统保存了工作的数据和状态,数据就是函数的局部变量, 状态就是程序指针。

    非递归原理: 1. 和递归函数的原理相同,只不过是把由系统负责保存工作信息变为程序自己保存,这样能减少保存数据的冗余(主要是 节省了局部变量的空间),提高存储效率。

    2. 把程序要完成的工作分成两类:手头工作和保存在栈中的 待完成的工作。手头工作指程序正在做的工作。由于某些工作不能一步完成,必须暂缓完成,于是可把它保存在栈中,这就是待完成的工作。

    3. 手头工作必须有其结束条件,不能永远做下去;保存的待完成工作必须含有完成该项工作的所有必要信息。

    昆明Java培训机构对于算法逻辑的解释你学会了么?后期会分享不一样的算法逻辑以及一些比较的代码,欢迎关注达内昆明Java培训。

    推荐文章

上一篇:昆明java培训分享:打破局限思维,提高编程生产力

下一篇:java实现深度、广度优先遍历

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56