各位程序员 friend 们好。
我有一个非常愚蠢的问题..我应该递归地对列表中的所有整数求和。我知道有一种更简单的方法可以做到这一点,实际上我也制作了该方法(请参阅下面的类(class))。但是这个任务的意思是我必须将列表分成两半,然后递归计算两半的总和,最后我只返回 half1 + half2。
问题是高级方法不会返回所有值的总和。谁能帮帮我吗?
方法 sum 是简单的方法。 Summer(用丹麦语总结)是更高级的方法。
package opgave1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class BinærSøgning {
public static void main(String[] args) {
Random random = new Random();
int tal = 3;
List<Integer> liste = new ArrayList<Integer>();
for (int i = 0; i < 10; i++)
liste.add(random.nextInt(10));
Collections.sort(liste);
System.out.println(liste);
// System.out.println(binærSøgning(liste, 0, tal));
System.out.println(summer(liste, 0));
}
public static int binærSøgning(List<Integer> liste, int start, int find) {
if (liste.size() > 0) {
int midt = liste.size() / 2;
if (liste.get(midt) == find)
return start + midt;
else if (liste.size() > 1) {
if (find < liste.get(midt))
return binærSøgning(liste.subList(0, midt), start, find);
else
return binærSøgning(liste.subList(midt + 1, liste.size()), start + midt + 1, find);
}
}
return -1;
}
public static int sum (List<Integer> list, int i)
{
if (i == list.size())
return 0;
else
return list.get(i) + sum(list, i+1);
}
public static int summer(List<Integer> list, int start){
int right = 0;
int left = 0;
if(start == list.size()){
return 0;
} else {
int mid = list.size() / 2;
if(start < mid){
left += list.get(start) + summer(list.subList(0, mid), start+1);
} else if(mid < list.size()){
right += list.get(mid) + summer(list.subList(mid+1, list.size()), mid+1);
}
}
return right + left;
}
}
最佳答案
Ii 使用两个基本情况要容易得多,如果您使用子列表,则不需要额外的“开始”参数。 (因为是作业,所以就不填了。)
public static int summer(List<Integer> list) {
//base 1
if (list.size() == 0) {
}
//base 2
else if (list.size() == 1) {
}
else
{
//no need for if statements now!
int left = summer(list.sublist(/* */))
int right = summer(list.sublist(/* */))
return left + right;
}
}
关于java - List<Integer> 递归求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8926867/