Наибольшее число в массиве по рекурсивным разделяй и властвуй - PullRequest
1 голос
/ 18 марта 2019

Мой код должен возвращать наибольшее число в данном массиве, используя рекурсивный метод «разделяй и властвуй».

Для [1,3,2,4,6] я должен вернуть 6.

Почему-то мой код StackOverflowing в строке 47

Исключение в потоке "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)));
    }

 }
}

1 Ответ

1 голос
/ 18 марта 2019

Измените это следующим образом:

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

Ваш код вызывает себя с теми же значениями first и last, и поэтому (обычно) будет бесконечно повторяться.

...