循环 代码可读性不如递归 但是效率更高
优点: 1. 简洁
2.在树的前序,中序,后序遍历算法中,递归的实现明显要比循环简单得多。
递归算法的代码很简洁。但同时也存在缺点
-
递归太深的话, 资源不够, 或者直接栈溢出;
-
系统在每次递归前都要保护现场, 资源占用比其他调用高很多;
-
可读性可能很好, 可能很差, 差到不得不debug才能看清逻辑;
1.递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。->效率
2.递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现。->效率
3.调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。->性能