【问题标题】:Find the sum of all elements in array recursively in java language用java语言递归查找数组中所有元素的总和
【发布时间】:2013-11-22 17:41:32
【问题描述】:

这是我的代码:

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);
}

我不断收到越界错误,但我没有做错什么。

【问题讨论】:

  • 您的停止条件在哪里?你没有一个,你一直在增加索引。

标签: java arrays recursion sum


【解决方案1】:

您的基础条件有问题。应该是:

if (index == array.length)

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

但是,你真的需要递归吗?在使用递归而不是循环来完成这项任务之前,我会认真考虑数百个想法。

【讨论】:

    【解决方案2】:

    试试,

    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);
        }
    }
    

    【讨论】:

    • 如果 index 是数组中元素的数量,sum({9}, 1) 会抛出 index 超出范围:array[1] + sum(array, 0)。数组中只有一个元素,array[1] 不存在。
    • 看我的主要方法。那应该是sum({9},0)
    • 数组为空怎么办。你有一个负索引。
    【解决方案3】:

    我没有从 0 到最高索引,而是从最高索引到 0,我做了 (index -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);
    }
    

    【讨论】:

      【解决方案4】:

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

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

      将收到一个越界错误,因为索引从 0 开始 - 因此意味着那里不会有索引。 'index - 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);
          }
      }   
      

      【讨论】:

        【解决方案5】:

        如果您使用的是 Java 1.8,您可以执行以下操作

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

        甚至

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-22
          相关资源
          最近更新 更多