递归和非递归方法的取舍
递归清晰易懂,但空间和时间都劣于非递归,请问大家怎么看?
[解决办法]
非递归是为了快, 需要别人懂吗.
[解决办法]
看你的应用场合了。
如果效率相当敏感,那你没得选,肯定要用非递归了。注释写清楚就行了
[解决办法]
需要根据场景和需求即实际中数据的大小。
[解决办法]
谁说非递归 就一定不好懂的
[解决办法]
鱼和熊掌,选一样吧
[解决办法]
若不追求效率,建议用递归。
你写出来的代码是给别人看的。
别人需要维护你的代码,当然需要代码越清晰越Happy
[解决办法]
递归和非递归是可以转化的,一般建议先递归实现,然后有性能问题再优化成非递归的。
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
退出条件
参数有哪些
返回值是什么
局部变量有哪些
全局变量有哪些
何时输出
会不会导致堆栈溢出
有时堆栈大小不够用时,只能将递归改为等效的非递归并使用自己实现的堆栈。
[解决办法]
递归是为了容易理解,而且递归转非递归是有一定的模式的。
所以先递归版本,把功能搞出来,然后按模式转成非递归的版本。
[解决办法]
另外不是所有的递归都有非递归的版本的。
[解决办法]
Yes!
[解决办法]
http://www.codeproject.com/script/Membership/View.aspx?mid=3782460
里面找“How to replace recursive functions using stack and while-loop to avoid the stack-overflow”
[解决办法]
能用loop+stack转的递归,多半是尾递归,非尾递归,其实是不好转非递归的程序的。