我理解这是计算机科学的基本问题,我的问题可能与this匹配。
但它并没有涵盖我在webapp中的两种不同场景。
我处理两个不同的树状对象数组,其中children
为成员。
现在
第一棵树高度固定(最多3层)
第二棵树,有任何水平深度。
两棵树的结构类似于下面(它是一个对象数组,基本上是一个JSON):
0 ---- someKey
|
---- someOtherKey
|
---- children
0 ---- someKey
|
---- someOtherKey
|
---- children
0 ---- someKey
|
---- someOtherKey
|
---- children []
1 ---- someKey
|
---- someOtherKey
|
---- children []
1 ---- someKey
|
---- someOtherKey
|
---- children []
2 ---- someKey
|
---- someOtherKey
|
---- children []
现在遍历第一棵树,我使用3个嵌套for循环,而第二个我使用递归访问每个节点直到离开。到目前为止,我的表现相当公平。
但在第一种情况下使用递归是否有任何优势?
或
在具有可变深度的第二棵树的情况下递归可能会失败吗?
答案 0 :(得分:0)
在第一种情况下,根据编程语言和实现,递归比循环,优点和缺点更糟糕
循环优于递归,因为它执行简单的条件检查和跳转,其中递归涉及推动堆栈帧,跳转,返回和从堆栈弹回。
在第二种情况下,需要递归,因为我们知道树的深度,所以我们不能在代码中放置那么多的循环。
答案 1 :(得分:0)
您可以在任何一种情况下使用任一方法。递归将为您提供更简单的代码,更易于维护和更易于阅读。可能会有性能成本,但这可能不会很大,特别是如果您能够使用尾递归。如果存在(i)需要更好的性能和(ii)在使用循环时可测量的性能改进,那么从递归开始然后只转移到循环可能是个好主意。