java - List<Integer> 递归求和

标签 java list recursion

各位程序员大家好。

我有一个非常愚蠢的问题。我应该递归地对列表中的所有整数求和。我知道有一种更简单的方法可以做到这一点,我实际上也做了那个方法(见下面的类(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/

相关文章:

Java 递归博弈论取得最佳进展

java - Major Garbage Collection 是否收集两代人的对象?

list - 存在于其他元组列表中的 Scala 过滤器列表[Int]

python - 如何计算无序列表中元素的频率?

javascript - 在javascript中实现一个将对象转换为字符串的递归函数

python - Python 中输入数字列表的排列

java - 遍历文件系统时出现空指针异常。 Java似乎找到了隐藏的文件夹,但不返回它们是这样的

Java Streams 方法不影响我的 ArrayList?

java - 如何在java中的for循环中创建数组

python - xmltodict 不返回一个元素的列表