以下是引用yeshirow在2006-9-1 18:23:55的发言:
是的啊, 穆楊說過, 使用遞歸會來非議...
是的啊, 穆楊說過, 使用遞歸會來非議...
我記得書也是有說的:
.... 遞歸解決方案的明顯優點是其簡單性. 爲此簡單付出的是速度的減慢和記憶體的開銷. 遞歸函式呼叫通常比循環開銷更大 (儘管對所謂的尾隨遞歸可進行編譯器優化, 將遞歸轉換成叠代). 遞歸函式呼叫還消耗了程式的堆棧空間. 如果堆棧空間非常珍貴(例如編寫操作系統內核時), 就不可能使用遞歸. 但是, 即使你有充足的堆棧, 你可能仍然要選擇叠代方案來處理非常大的鍵表. 另一方面, 因爲記憶體的消耗, 應用非常大的鍵表也是下策. 在任何情況下, 不管采取哪種途徑, 都必須把握好平衡點......
......
<<C++ 實踐之路>>
这说的没错。但使用递归使用的好的话不会有太多问题。真正无法避免的就是非递归一个什么逻辑就能搞定的东西递归需要作一次函数呼叫。指针跳的距离远了一点,这点距离非不了什么效率。其它对于资源的问题递归写的干净的话不会出问题。一个最常用的递归写法就是顺着树找各节点,递归时其实根本就没什么参数需要压到栈里,就传一个指针周围所有的东西就全找到了,同时递归时少用局部变量也能避免堆占的浪费。如果用递归时还把一大堆数据放在argument list里面来回copy的话用递归肯定特别浪费。这已经不是用不用递归的问题。是程序设计的基本思想问题。参数传递的时候尽量避免参数考贝(pass by value),尽量pass by reference或者pass by pointer。
http://myajax95./