我有一些代码,我想通过递归提高效率。问题是我不知道从哪里开始。代码比较两个数组列表a和b,看它们是否相等。假设两个数组的大小相等。
代码
public boolean isEqual(A B) {
boolean answer = false;
if (lessThanOrEqualTo(B) == true);
for (int i = 0; i < DList.size(); i++) {
if (DList.get(i) == B.DList.get(i)) answer = true;
else answer = false;
}
return answer;
}
我现在已经写了
public boolean isEqualRecursion(A B) {
if DList.size() == 0;
return false();
} else {
}
我知道停止情况是0,因为当size为0时什么也没有发生。我不知道接下来该写什么
任何帮助都将不胜感激
谢谢
我有一些代码,我想通过递归来提高效率。
你不太可能通过递归来提高效率。很有可能,它将效率更低,而且也很脆弱。这是因为标准Java编译器不实现尾部调用优化。这是因为如果输入数组足够大,递归比较算法容易触发堆栈溢出。
但是,如果您想继续将此作为"练习",那么我的提示是向isEqualRecursion
签名添加索引参数…
我认为这对你来说是一个很好的开始。这将遍历所有元素,假设它们是一个数组,然后检查它们的大小是否相等。
public boolean isEqual(ArrayList<?> a, ArrayList<?> b) {
if (a.size() != b.size())
return false;
for (int i = 0; i < a.size(); i++) {
if (!isEqual((ArrayList<?>)a.get(i), (ArrayList<?>)b.get(i))) {
return false;
}
}
return true;
}
现在有几件事要考虑:
这假设a(和b)的内容必须是
(ArrayList<?>)a.get(i)
行的ArrayList
,如果我们的ArrayList
实际上包含其他东西,如整数呢?如果我们的数组列表包含
null
作为一个项目呢?如果我们传递两个空
ArrayList
s呢?(甚至只有一个?)
我不确定你的功能lessThanOrEqualTo(B)
的点是问题的这一部分还是你写错了?
什么是DList
?
这是一个典型的递归问题。您可能想尝试这样做:
int x = 0;
if(Dlist.get(x) != B.Dlist.get(x)) {
return false;
} else {
x+1;
}
if( x!= dList.size()) {
recursion;
}
return true;