0

Hi, I have a javaproblem that I just can't solve.

"Write a recursive method who returns the largest value in an array with the signature:

public int max(int[] v)

(Hint: If you need to, use a private help-method)

It would be easy if it was allowed to change the signature so that it includes a counter, for example like this

public int max(int[] v)

    int max(int [] v, int len)
    {
        int m;
        if(len == 1)
            return v[0];
            else if(len == 2)
            if(v[0] >= v[1]) {
                return v[0];
            }
            else {
                return v[1];
            }
        else{
             m = max(v,len-1);
             if (m >= v[len - 1]) {
                return m;
                }
                else {
                    return v[len - 1];
                }
        }
    }   
    }

But I can't do this. I would be really greatful if anyone cuold help me with this.

4
Contributors
11
Replies
12
Views
7 Years
Discussion Span
Last Post by JamesCherrill
0

Why can't you do this? An error? If so, please post it!

Btw, if you could post your files on a site, it would be extremely helpful.

Edited by arithehun: n/a

0

Hmm... Just got it... What you need may be like this...

public int max(int[] v) {
  return helpFindMax(v, 0, v.length()-1);
}

private int helpFindMax(int[] v, int start, int end) {
  // This is the recursive method.
  // Do the search here and return the largest integer.
}

Edited by Taywin: n/a

0

Hmm... Just got it... What you need may be like this...

public int max(int[] v) {
  return helpFindMax(v, 0, v.length()-1);
}

private int helpFindMax(int[] v, int start, int end) {
  // This is the recursive method.
  // Do the search here and return the largest integer.
}

Yep I first thought that this was the way to solve the assignment but then I realised that the max method is no longer recursive. If the help-method is recursive or not has no relevance.

0
// pseudo code
int max (int [] v) {
   if (v has only 1 element) return that element
   int[] v1 = copy of v excluding the first element
   int maxV1= max(v1)
   if (first element of v  >  maxV1) return first element of v;
   return maxV1;
}
0
// pseudo code
int max (int [] v) {
   if (v has only 1 element) return that element
   int[] v1 = copy of v excluding the first element
   int maxV1= max(v1)
   if (first element of v  >  maxV1) return first element of v;
   return maxV1;
}

Something like this? It gives me a stackOverflow...

int max(int [] v) {
    if (v.length == 1){
        return v[0];
    }
    int[] v1 = Arrays.copyOfRange(v, 1, (v.length + 1)); //stackOverflow here
    int maxV1 = max(v1);
    if (v[0] > maxV1){ 
        return v[0];
    }
    return maxV1;
}
0

Line 5 - you have +1 that shouldn't be there - you are removing the first entry but adding a new zero entry at the end - hence it never stops recursing.

0

Line 5 - you have +1 that shouldn't be there - you are removing the first entry but adding a new zero entry at the end - hence it never stops recursing.

Aaah.. I misinterpreted the copyOfRange documentation.

Thanks a ton!! You are the man James! :)

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.