如何将打印到控制台的递归方法转换为返回字符串?

时间:2017-07-01 06:43:30

标签: java recursion

大家好,感谢您的帮助。 我有这个在控制台中打印的递归方法。

private void printPath(Vertex destiny) {
        if (destiny.getPrevious() != null) {
            printPath(destiny.getPrevious());
            System.out.print(" to ");
        }
        System.out.print(destiny.getName());
    }

但是现在我需要返回连接的String而不是打印。 我有这种糟糕的尝试......

private String printPath(Vertex destiny, String concat) {
        if (destiny.getPrevious() == null) {
            return " , " + concat;
        } else {
            return printPath(destiny, (destiny.getName() + " " + concat));
        }
    }

但是我无法使它工作,它给了我一个StackOverflowException。

编辑: 输出到控制台是例如: “西班牙到德国到波兰到希腊”...... 而且我希望在String中返回它。

3 个答案:

答案 0 :(得分:1)

您的方法未正确终止,请尝试以下操作:

private String printPath(Vertex destiny, String concat) {
    if (destiny.getPrevious() == null) {
        return " , " + concat;
    } else {
        return printPath(destiny.getPrevious(), (destiny.getName() + " " + concat));
    }
}

destiny.getPrevious()而不是destiny传递给方法。

答案 1 :(得分:0)

这个怎么样:

private StringBuilder printPath(Vertex destiny, StringBuilder path) {
        if (destiny.getPrevious() != null) {
            printPath(destiny.getPrevious(), path);
            path.append(" to ")  ;
        }
        path.append(destiny.getName());
        return path;
    }

答案 2 :(得分:0)

如果您期望产量为“西班牙到德国到波兰到希腊”

案例1:如果destiny.getPrevious()== null,那么它将仅在第一个代码中返回destiny.getName()。

案例2:如果destiny.getPrevious()!= null则会将第一个元素返回到最后一个元素

private String printPath(Vertex destiny, String concat) {
    if (destiny.getPrevious() == null) {
        return destiny.getName() + concat;
    } else {
        return printPath(destiny.getPrevious(), (" to " + destiny.getName() + concat));
    }
}