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

Java递归函数,值的单一初始化,java,recursion,Java,Recursion,我想用递归函数来实现一些东西,包括打印输出。我想在正在打印的输出中增加tab的级别。我使用以下方法成功地实现了这一点 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.g

我想用递归函数来实现一些东西,包括打印输出。我想在正在打印的输出中增加tab的级别。我使用以下方法成功地实现了这一点

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不接受所传递参数的默认值,否则这可能是一个可行的解决方案。还有什么方法可以做到这一点呢?

我将其分为两种方法:一种是公共方法,仅使用自然参数,另一种是私有方法,在本例中使用两个参数n和count,传递初始值。您不需要在方法中修改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);
    }
}
请注意,最外层没有选项卡,而原始代码只使用了一个选项卡。如果需要,可以只通过1而不是0


我也会重新命名那里的一切。名字很重要-花些时间挑选好的名字

我将其分为两种方法:一种是公共方法,只包含自然参数;另一种是私有方法,在本例中包含两个参数n和count,传递初始值。您不需要在方法中修改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);
    }
}
请注意,最外层没有选项卡,而原始代码只使用了一个选项卡。如果需要,可以只通过1而不是0


我也会重新命名那里的一切。名字很重要-花些时间挑选好的名字

每次调用递归函数时都打印输出?您应该将count也作为方法参数传递,最初将其作为0传递。是的,这是可能的解决方案,但是有没有一种方法不需要每次都将其作为0传递?每次调用递归函数时都打印输出?您应该同时将count作为方法参数传递,最初将其作为0传递。是的,这是可能的解决方案,但有没有一种方法不需要每次都将其作为0传递?啊,当然!是的,这些不是代码中使用的实际名称:啊,当然!是的,这些不是代码中使用的实际名称: