我有一项任务要做。我完成了它,但我用2个函数完成了它。当我在班上有多个功能时,我们使用的自动检查器不起作用。
NB!如何合并这两个函数??
package stamps;
import java.util.ArrayList;
import java.util.Collection;
public class Stamps {
public static ArrayList<Integer> findstamps(int sum, int[] stamps){
ArrayList<Integer> test = new ArrayList<Integer>();
for(int index = 0; index<stamps.length; index++){
test.add(stamps[index]);
}
ArrayList<Integer> pusto = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> vastused_one = new ArrayList<ArrayList<Integer>>();
vastused_one.addAll(findstamps2(sum, test, pusto));
int min = 99999999;
ArrayList<Integer> vast = new ArrayList<Integer>();
for (ArrayList<Integer> list : vastused_one){
if (list.size()< min){
min = list.size();
vast = list;
}
}
System.out.println("Here it is : " + vast);
return vast;
}
public static ArrayList<ArrayList<Integer>> findstamps2(int sum, ArrayList<Integer> stamps, ArrayList<Integer> mem) {
ArrayList<ArrayList<Integer>> vastused = new ArrayList<ArrayList<Integer>>();
for (int i : stamps ) {
ArrayList<Integer> my_mem = new ArrayList<Integer>();
my_mem.addAll(mem);
System.out.println(my_mem + " " + mem);
if (sum - i == 0){
my_mem.add(i);
vastused.add(my_mem);
System.out.println("Found " + my_mem);
System.out.println("ADDED : " + vastused);
break;
}
else if (sum - i < 0){
my_mem.add(i);
System.out.println("Terminated " + my_mem);
}
else {
my_mem.add(i);
vastused.addAll(findstamps2(sum-i, stamps, my_mem));
}
}
System.out.println("RETURNING : " + vastused);
return vastused;
}
}
答案 0 :(得分:0)
如果不能使用相同的签名递归使用相同的函数,则必须采用迭代方法。我不想放弃太多,因为这显然是一项家庭作业,但你有什么可能有一段时间或做while循环。