recursively sum the integers in an array

前端 未结 9 1003
不思量自难忘°
不思量自难忘° 2020-12-06 03:01

I have a program that I\'m trying to make for class that returns the sum of all the integers in an array using recursion. Here is my program thus far:

public         


        
相关标签:
9条回答
  • 2020-12-06 03:37
    private static int sum(int[] arr) {
        // TODO Auto-generated method stub
        int n = arr.length;
    
        if(n==1)
        {
            return arr[n-1];
        }
    
        int ans = arr[0]+sum(Arrays.copyOf(arr, n-1));
    
        return ans;
    }
    
    0 讨论(0)
  • a is an int array. Thus a[n-1] is an int. You are passing an int to sumOfArray which expects an array and not an int.

    0 讨论(0)
  • 2020-12-06 03:42

    Simplified version:

    //acc -> result accumlator, len - current length of array
    
    public static int sum(int[] arr, int len, int acc) {
        return len == 0 ? acc :  sum(arr, len-1,  arr[len-1]+ acc); 
    }   
    public static void main(String[] args)  {
        int[] arr= { 5, 1, 6, 2};
        System.out.println(sum(arr, arr.length, 0));
    }
    
    0 讨论(0)
  • 2020-12-06 03:44

    How about this recursive solution? You make a smaller sub-array which contains elements from the second to the end. This recursion continues until the array size becomes 1.

    import java.util.Arrays;
    
    public class Sum {
        public static void main(String[] args){
            int[] arr = {1,2,3,4,5};
            System.out.println(sum(arr)); // 15
        }
    
        public static int sum(int[] array){
            if(array.length == 1){
                return array[0];
            }
    
            int[] subArr = Arrays.copyOfRange(array, 1, array.length);
            return array[0] + sum(subArr);
        }
    }
    
    0 讨论(0)
  • 2020-12-06 03:45

    The solution is simpler than it looks, try this (assuming an array with non-zero length):

    public int sumOfArray(int[] a, int n) {
        if (n == 0)
            return a[n];
        else
            return a[n] + sumOfArray(a, n-1);
    }
    

    Call it like this:

    int[] a = { 1, 2, 3, 4, 5 };
    int sum = sumOfArray(a, a.length-1);
    
    0 讨论(0)
  • 2020-12-06 03:46
    a[n-1] 
    

    is getting the int at n-1, not the array from 0 to n-1.

    try using

    Arrays.copyOf(a, a.length-1);
    

    instead

    0 讨论(0)
提交回复
热议问题