我试图递归地打印列表的内容,这就是我应该得到的
[6, 8] but I am getting [8, 8 6, 6]
但是它以错误的顺序打印,而且它自身也会重复。
我对递归仍然很新,所以如果这听起来像是一个基本问题我会道歉。这是我的方法:
private String toStringHelper (ArrayList<E> elements, int index, String ret){
if(index>=elements.size())return ret;
if (ret != null){ret += elements.get(index).toString() + ", ";}
ret += elements.get(index).toString() + " ";
return toStringHelper(elements, ++index, ret);
}
我如何在结构上修复它以便输出我想要的方式?我的递归是否以相反的顺序打印出来?
答案 0 :(得分:3)
你想念别人我想:
if (ret == null) {
ret = elements.get(index).toString() + ", ";
} else {
ret += elements.get(index).toString() + " ";
}
答案 1 :(得分:3)
private String toStringHelper(ArrayList<E> elements, int index) {
if (index >= elements.size())
return "";
String s = toStringHelper(elements, index + 1);
if (index < elements.size() - 1)
s += ", ";
s += elements.get(index).toString();
return s;
}
希望它的工作!
答案 2 :(得分:0)
您确实希望避免使用该ret
参数;这只会使问题复杂化。为什么不去寻找类似的东西:
private String toStringHelper (ArrayList<E> elements, int index) {
if(index>=elements.size()) {
return "";
}
String trailingElements = toStringHelper(elements, ++index);
if (trailingElements.isEmpty()) {
return elements.get(index).toString();
else {
return elements.get(index).toString() + ", " + trailingElements;
}
}
例如。
仅供记录:当然可以在这里使用递归;但这是应该使用简单的for-each循环的示例之一;因为它更容易阅读;并以直截了当的方式完成工作。在这种情况下,该递归方法为您提供 nothing 但其他复杂性。