求二分查找的递归和非递归的时间空间效率比较,为什么在刘汝佳的书上说,一般用非递归方法
递归算法写起来简单,但是有两个不足,一个是调用接口的开销,函数调用本身是有开销的。
另一个是堆栈内存比较小,递归调用层次深,容易引起堆栈溢出错误(著名的stack overflow)。非递归没有这个问题。
还有就是一些编程语言(很久很久以前,在你出生的年代之前),是没有函数调用的,那么就不能递归了。
http://bbs.csdn.net/topics/300190422
递归牵涉到环境保存和环境恢复操作,因此会把速度拖慢,而非递归不存在环境保存和恢复的问题
递归的实现方式是采用函数调用,这个会增加额外的时间(参数传递,结果返回,程序片段跳转),这些都将增大开销。
而采用非递归方式,其所占的资源很少,而且在一个函数内部,cache命中率啥的,估计都要高