昆明java培训
达内昆明广州春城路

18487146383

热门课程

昆明Java培训分享:Java递归与非递归算法详解

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

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

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

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

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

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

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

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

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

昆明java培训

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

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

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

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

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

上一篇:昆明java培训分享:打破局限思维,提高编程生产力
下一篇:java实现深度、广度优先遍历

“因材施教,分级培优”十问十答

达内举办“2016授课讲师资格认证培训“,不断提升教学品质

达内牵手猿圈科技,打造技能测评、学习、就业一站式服务

毕业三年之内能转行学编程吗?

选择城市和中心
贵州省

广西省

海南省

台湾