【问题标题】:Finding Max of an array using Recursion使用递归查找数组的最大值
【发布时间】:2014-03-24 16:21:21
【问题描述】:

因此,使用 for 循环或 while 循环查找数组的最大值非常简单,但我想尝试使用递归。出于某种原因,子字符串不起作用 - 它说“找不到符号”。为什么是这样?我的策略是继续细分并比较两侧,直到只剩下一个应该是最大值的地方......我做得对吗?谢谢

   public static int max(int[] array) {

    if (array.length == 1) {
        return array[0];
    } else {
        int mid = (array.length) / 2;
        int leftmax = max(array.substring(0, mid));
        int rightmax = max(array.substring(mid, array.length));
        if (leftmax > rightmax) {
            return leftmax;
        } else {
            return rightmax;
        }

    }
}

【问题讨论】:

  • 这是什么编程语言?爪哇? JavaScript?
  • 为什么要递归?你可能会炸掉你的筹码。
  • 我需要练习我的递归:o
  • 如果您等待几分钟,我将使用有效的解释递归添加答案。我希望你能从中吸取教训,现在,你根本没有使用递归 :)。
  • @libik 为什么你说他没有使用递归?他正在从max() 内部呼叫max()。这就是递归。

标签: java arrays recursion


【解决方案1】:

您将要使用Arrays.copyOfRangeSubstring 不适用于数组。

int[] firstHalf = Arrays.copyOfRange(original, 0, original.length/2);
int[] secondHalf = Arrays.copyOfRange(original, original.length/2, original.length);

我无法评论你的算法。

【讨论】:

    【解决方案2】:

    由于array 的类型为int[] 而不是String,因此您不能使用substring()。相反,请跟踪您正在搜索的索引。每次迭代复制数组既浪费空间又浪费时间。

    int max( int[] array ){ return max( array, 0, array.length - 1 ); }
    
    int max( int[] array, int low, int high )
    {
        if (low == high) {
            return array[low];
        } 
        else {
            int mid = (high + low) / 2;
            int leftmax = max(array, low, mid );
            int rightmax = max(array, mid, high );
            if (leftmax > rightmax) {
                return leftmax;
            } 
            else {
                return rightmax;
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 2016-05-07
      • 2012-10-18
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多