Java递归函数,单值初始化值

时间:2014-02-26 07:24:03

标签: java recursion

我想使用递归函数来实现一些东西,包括打印输出。我想在打印的输出中增加标签级别。我能够使用以下方法成功实现这一目标

int count =0;
public void m1 (Object n)
{
    count++;
    List nl = n.getChildren();
    int nlsize = nl.size();
    for (int i = 0 ; i < nlsize ; i++)
    {
        String objName = nl.getObjAt(i).getText();
        for (int tab=0; tab<count ; tab++) {System.out.print("\t");}
        System.out.println(objName);
        m1(nl.getObjAt(i));
    }
    count--;
}

但是这种方法的局限性和问题,即外部计数的初始化,是非常明显的。

有没有办法实现这个目标?我知道java不接受传递的参数的默认值,否则这可能是一个可能的解决方案。如何实现这一目标呢?

1 个答案:

答案 0 :(得分:7)

我会把它分成两个方法:一个只有“自然”参数的公共方法,一个带有两个参数的私有方法(在这种情况下是ncount),传入初始值值。您无需在方法中修改count - 只需在递归调用中传递count + 1

public void m1(Object n) {
    m1(n, 0);
}

private void m1(Object n, int count) {
    List nl = n.getChildren();
    int nlsize = nl.size();
    for (int i = 0; i < nlsize; i++) {
        String objName = nl.getObjAt(i).getText();
        for (int tab = 0; tab < count; tab++) {
            System.out.print("\t");
        }
        System.out.println(objName);
        m1(nl.getObjAt(i), count + 1);
    }
}

请注意,这是从最外层的 no 标签开始,而原始代码使用一个标签。如果您愿意,可以传递1而不是0

(我也会在那里重命名所有。名字非常重要 - 花一些时间挑选好的!)