2014-02-13 2 views
0

Это мой тестовый массивFinding Наибольшее значение в массиве, используя рекурсию

int [] A = {1,2,7,3,5,6}; 

это метод

public static int largest(int [] A) 
{ 
    int temp = A[0]; 
    return largestRec(A, 0, A.length - 1, temp); 
} 

// WRITE THIS METHOD that returns the largest of the elements in A 
// that are indexed from low to high. RECURSIVELY! 
private static int largestRec(int [] A, int low, int high, int temp) 
{ 
    if (low == high) 
    return A[low]; 

    if (low <= A.length){ 
    if (A[low] > temp){ 
     temp = A[low]; 
    } 
    largestRec(A, low+1, high, temp);  
    } 
    return temp 
} 

Почему возвращаются в исходное состояние TEM и возвращения A[0] которое 1?

ответ

0

Проблема в том, что вы ничего не делаете с возвращаемым значением рекурсивного вызова до largestRec. Помните, что параметры проходят по значению (даже в рекурсивных вызовах одной и той же функции), поэтому изменение его внутри функции не влияет на внешний.

Я не думаю, что вы должны передавать temp в качестве параметра вообще.

private static int largestRec(int [] A, int low, int high) 
{ 
    int temp; 
    if (low == high) 
    temp = A[low]; 
    else 
    { 
    temp = largetstRec(A, low+1, high); 
    if (A[low] > temp){ 
     temp = A[low]; 
    } 
    } 
    return temp; 
} 

Это держит temp локальной по отношению к функции (который я думаю, что вы, вероятно, означало бы называть его temp в первую очередь).

+0

Спасибо, что решите все. – user3247435

0
private static int largestRec(int [] A, int low, int high){ 
    var largest = A[low]; 

    if(low == high) 
    return largest; // or A[high] because both are same 

    for(var i = low; i < high; i++){ 
    if(largest < A[i]) 
     largest = A[i]; 
    } 

    return largest; 
} 
+0

Это должен быть рекурсивный метод, поэтому запрещается использование петель – user3247435

Смежные вопросы