递归与非递归相比有哪些主要的优点和缺点?
递归程序的优点是程序结构简单、清晰,程序易读,易证明其正确性。
缺点是执行中占内存空间较多,执行效率低,算法不容易优化。
递归的关键点
递归算法的设计实际上就是对问题进行抽象的过程,如果抽象到每个小问题都有想用特征,就形成了递归。
递归定义由基本项和归纳项两部分组成。基本项描述了递归过程的一个或几个终结状态,即不需要继续递归就可求值的状态。归纳项描述了从当前状态向终结状态的转换。即将复杂问题化为较简单的问题,而简单问题与复杂问题的形式是一样。每递归一次都要向终止条件靠近一步,最终达到终止条件。
递归是程序设计中的重要技术。当问题的定义是递归、数据结构是递归的和问题的解法是递归的时,最好利用递归。求解递归问题时,要先出问题求解的递归定义。递归定义由基本项和归纳项组成。递归过程的实质是将复杂问题分解成若干子问题,子问题与原问题具有相同特征,但是简单了。子问题解决了,原问题就会迎刃而解。
递归和迭代的区别
迭代使用循环结构,不需要反复调用函数和占用额外的内存。
递归使用选择结构,可以使程序的结构更清晰、更简洁、更易理解,但大量递归调用会建立函数的副本,会耗费大量的时间和内存。