关于什么是递归和为什么递归效率低下,可参照《数据结构》。
我想告诉您的是:编写Java代码时,不要迷信非递归算法。
递归的好处是:把大规模的问题分解成小规模的问题,直至浅显易懂、可立即求解。
写Java代码时,递归有可能比非递归更快。可能是因递归调用经由JVM内部实现时,JVM对它进行了算法优化。如果您有更好的解释,请告诉我(weilai2@163.com)
为此,我做过测试,以下是测试数据:
树的结点类型是TreeNode0(自定义的),10万次遍历(CPU双核2.66G) , 2009-1-1
当有22 个结点时,树最深处有5 层,递归遍历耗时0.188秒, 非递归遍历耗时0.625秒。
当有40 个结点时,树最深处有4 层,递归遍历耗时0.35 秒, 非递归遍历耗时1.13 秒。
当有133个结点时,树最深处有13层,递归遍历耗时1.031秒, 非递归遍历耗时3.625秒。
当有790个结点时,树最深处有62层,递归遍历耗时6.56 秒, 非递归遍历耗时11.62秒。
end.