首页 文章

以递归方式查找Java中数组的总数

提问于
浏览
0

我理解通过迭代而不是递归更容易找到数组中的数字总和,但如果我使用递归来编写这样的函数,那么这段代码会出现什么问题呢?

public static double sum (double[] a) {
    if (a.length == 0)
        return 0.0;
    else{
        return sumHelper (a, 1, a[0]);
    }
}
private static double sumHelper (double[] a, int i, double result) {
    if (i < a.length) {
        result = result + sumHelper (a, i + 1, result);
    }
    return result;
}

一切都运行没有错误,但在我测试时没有返回正确的总和 .

4 回答

  • 2
    public class RecursiveSum {
        public static void main(String[] args) {
            System.out.println(sum(new double[] {1,3,4,5}));
        }
    
        public static double sum(double[] a) {
            if (a.length == 0)
                return 0.0;
            else{
                return sumHelper(a, 0);
            }
        }
    
        private static double sumHelper(double[] a, int i) {
            if(a.length - 1 == i){
                return a[i];
            }else{
                return  a[i] + sumHelper(a, i + 1);
            }
        }
    }
    
  • 1

    将i的值初始化为0,因为您正在传递1.或尝试这个

    public static void main(String args[]){
        double a[]=new double[10];
        a[0]=123;
        a[1]=123;
        a[2]=123;
        a[3]=123;
        a[4]=123;
        a[5]=123;
        a[6]=123;
        a[7]=123;
        a[8]=123;
        a[9]=123;
        System.out.println(sum(a));
    }
    
  • 0

    主方法声明有问题:

    public static void main(String args[]){
            double a[]=new double[10];
            a[0]=123;
            a[1]=123;
            a[2]=123;
            a[3]=123;
            a[4]=123;
            a[5]=123;
            a[6]=123;
            a[7]=123;
            a[8]=123;
            a[9]=123;
            System.out.println(sum(a));
        }
    
  • 2

    如果你只是使用一种方法递归地对数组中的所有数字求和,那么这就是你要去的方法 . public static void main(String [] args){

    double a[]=new double[6]; //initialize it
            a[0]=1; //fill it with values
            a[1]=2;
            a[2]=3;
            a[3]=4;
            a[4]=5;
            a[5]=6;
    
            System.out.println(sum(a, a.length-1)); //call the method and print as well
    
    }
    
    public static double sum( double arr[], int n ) { 
          if (n < 0) {
            return 0;
          } else{
            return arr[n] + sum(arr, n-1); //magic 
          }
        }
    

相关问题