各位程序員你好。遞歸列表<Integer>的總和
我有一個非常愚蠢的問題..我應該總結列表中的所有整數,遞歸。我知道有一個更簡單的方法可以做到這一點,而且我也實現了該方法(請參見下面的課程)。但是這個任務的意義在於我必須將列表分成兩半,然後在兩半上遞歸計算總和,最後我只返回half1 + half2。
問題是高級方法不返回所有值的總和。誰能幫幫我嗎?
方法和是簡單的方法。夏季(丹麥語彙總)是更先進的方法。
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;
}
}
你應該嘗試使用調試器,或簡單的print語句來縮小誤差的來源。 –
+1方法名稱內有趣的人物! (binærSøgning)並且知道丹麥語中的* binarySearch * –
當您的列表大小是2的冪(等於64)時,您遇到問題,我認爲當您劃分爲2時,您會丟失一些元素 –