有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用java语言递归求数组中所有元素的和

这是我的密码:

public int sum(int[] array, int index) 
  {
    //int index is the number of elements in the array. 
       //Here is my base case:
    if (index == 0)
        return 0;
    //Now it's time for the recursion
    else
        return array[index] + sum(array, index + 1);
}

我不断地犯越界错误,但我不知道我做错了什么


共 (5) 个答案

  1. # 1 楼答案

    你的基本条件有问题。应该是:

    if (index == array.length)
    

    注意,您需要在第一次调用时传递index = 0。如果要传递index = array.length - 1,则保持基本大小写不变,并将递归方法调用更改为传递index - 1,而不是index + 1

    然而,您真的需要递归吗?在进行递归而不是循环执行此任务之前,我会认真思考数百次

  2. # 2 楼答案

    @Masud-your's代码有一个逻辑错误(我是Java初学者,如果我不正确,很抱歉)

    return array[index] + sum(array, index - 1);
    
         array[index]    
    

    当索引从0开始时,将收到一个越界错误-因此意味着那里不会有索引。 “索引-1”将起作用。 此外,这会将基本大小写更改为返回“0”,因为返回的数组[0]将添加两次数组[0],且总和不正确

    这是我的代码:

    public static int sumArrayRecursion(int array[], int n){
        if (n == 0){
            return 0;
        }
        else {
            return array[n-1] + sumArrayRecursion(array, n-1);
        }
    }   
    
  3. # 3 楼答案

    试试看

    public static void main(String[] args){
        int arr[] = {3, 4, 6, 7};
        System.out.println(sum(arr, arr.length-1));
    
    }
    
    public static int sum(int[] array, int index) {
        if (index == 0) {
            return array[0];
        } else {
            return array[index] + sum(array, index - 1);
        }
    }
    
  4. # 4 楼答案

    不是从0到最高索引,而是从最高索引到0,我这样做了(索引-1),因为你们说索引是元素总数,所以若数组有10个元素,最后一个元素有索引9

    public int sum(int[] array, int index) 
      {
        //int index is the number of elements in the array. 
           //Here is my base case:
        if (index == 0)
            return 0;
        //Now it's time for the recursion
        else
            return array[index-1] + sum(array, (index - 1);
    }
    
  5. # 5 楼答案

    如果您使用的是Java1.8,那么可以执行以下操作

    public int sum(int[] array) 
    {
         return (int)array.stream().sum();
    }
    

    甚至

    public int sum(int[] array) 
    {
         return (int)array.sum();
    }