嵌套for循环与固定高度Tree的递归

时间:2014-04-17 07:08:45

标签: javascript recursion tree iteration

我理解这是计算机科学的基本问题,我的问题可能与this匹配。

但它并没有涵盖我在webapp中的两种不同场景。

我处理两个不同的树状对象数组,其中children为成员。 现在

  1. 第一棵树高度固定(最多3层)

  2. 第二棵树,有任何水平深度。

  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循环,而第二个我使用递归访问每个节点直到离开。到目前为止,我的表现相当公平。

    但在第一种情况下使用递归是否有任何优势?

    在具有可变深度的第二棵树的情况下递归可能会失败吗?

2 个答案:

答案 0 :(得分:0)

在第一种情况下,根据编程语言和实现,递归比循环,优点和缺点更糟糕 循环优于递归,因为它执行简单的条件检查和跳转,其中递归涉及推动堆栈帧,跳转,返回和从堆栈弹回。
在第二种情况下,需要递归,因为我们知道树的深度,所以我们不能在代码中放置那么多的循环。

答案 1 :(得分:0)

您可以在任何一种情况下使用任一方法。递归将为您提供更简单的代码,更易于维护和更易于阅读。可能会有性能成本,但这可能不会很大,特别是如果您能够使用尾递归。如果存在(i)需要更好的性能和(ii)在使用循环时可测量的性能改进,那么从递归开始然后只转移到循环可能是个好主意。