java - 通过递归分而治之获得数组中的最大数字

标签 java arrays recursion methods divide-and-conquer

我的代码应该使用递归分治方法返回给定数组中的最大数字。

对于 [1,3,2,4,6] 我应该返回 6。

由于某种原因,我的代码在第 47 行出现 StackOverflowing

Exception in thread "main" java.lang.StackOverflowError at maiordivisaoconquista.DivideAndConquer.Highest(DivideAndConquer.java:47)

public class DivideAndConquer {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) 
{
   Scanner s = new Scanner (System.in);
   int n = s.nextInt();
   int a[] = new int [n];
   for(int i = 0; i < a.length; i++)
   {
       a[i] = s.nextInt();
   }
   int first = 0;
   int last  = a.length;
   System.out.println(Highest(a,first,last));
}

public static int Highest (int a[], int first, int last)
{

    if(first == last)
    {
        return a[first];
    }
    if (last - first == 1)
    {
        return Math.max(a[first],a[last]);
    }

    else
    {
       int middle = (first +last)/2;
       return(Math.max(Highest(a,first,last),Highest(a,middle+1,last)));
    }

 }
}

最佳答案

像这样改变:

return(Math.max(Highest(a, first, last),   Highest(a, middle+1, last)));
                                    |
                                    |
                                    V
return(Math.max(Highest(a, first, middle), Highest(a, middle+1, last)));

您的代码使用相同的 firstlast 值调用自身,因此(通常)会无限递归。

关于java - 通过递归分而治之获得数组中的最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55213574/

相关文章:

java - Java 的序列化是如何工作的,什么时候应该使用它来代替其他一些持久性技术?

javascript - 基于数组生成可变的Leaflet标记颜色

javascript - 围绕数组嵌套循环

javascript - 如何在对象数组中只包含一次值?

c# - 通过 C# 中的递归将 Flat List<T> 转换为结构化 List<T>?

python - 递归二进制搜索无法系统地工作

java - 如何执行我的 java 桌面应用程序的单个实例?

Java - BigDecimals 太多了?

java - 当单击菜单时从 java 更改应用程序的背景时,它不会采用正确的颜色

java - 找出足球锦标赛中所有比赛的所有可能结果