


昆明java培训
达内昆明广州春城路
18487146383
作为编程语言,对于算法的学习很重要,对你昆明Java培训就介绍一下递归与非递归算法之间的一些区别与转化,希望对你有帮助。
非递归:非递归是采用循环(最好是循环迭代)或者栈的方式来遍历,效率高。
递归:在过程或函数里调用自身,必须有递归结束条件(递归出口),程序思路清晰,可读性强。由于递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
达内昆明Java培训认为,递归和非递归的效率应该和递归的深度有很大关系,当递归调用次数很多时,函数调用的额外开支必须要考虑。
很多时候建议将将递归算法转换为非递归算法。一般有以下三种方法。
(1) 通过分析,跳过分解过程,直接用循环结构的算法实现求解过程。
(2).自己用栈模拟系统的运行时栈,通过分析只保存必须保存的信息,从而用非递归算法替代递归算法。
(3).利用栈保存参数,由于栈的后进先出特性吻合递归算法的执行过程,因而可以用非递归算法替代递归算法。
递归原理: 用栈保存未完成的工作,在适当的时候从栈中取出并执行。 系统保存了工作的数据和状态,数据就是函数的局部变量, 状态就是程序指针。
非递归原理: 1. 和递归函数的原理相同,只不过是把由系统负责保存工作信息变为程序自己保存,这样能减少保存数据的冗余(主要是 节省了局部变量的空间),提高存储效率。
2. 把程序要完成的工作分成两类:手头工作和保存在栈中的 待完成的工作。手头工作指程序正在做的工作。由于某些工作不能一步完成,必须暂缓完成,于是可把它保存在栈中,这就是待完成的工作。
3. 手头工作必须有其结束条件,不能永远做下去;保存的待完成工作必须含有完成该项工作的所有必要信息。
昆明Java培训机构对于算法逻辑的解释你学会了么?后期会分享不一样的算法逻辑以及一些比较的代码,欢迎关注达内昆明Java培训。
怕钱不够?就业挣钱后再付学费; 怕学不会? 真正0基础入学,120天精通; 担心就业? 7万家雇主企业,名企内部就业