Ваша логика неверна, поскольку вы всегда возвращаете значение первого элемента (поскольку l.data > max
всегда будет true
, поскольку max
всегда 0
в этой точке).
Правильный способ рекурсивного нахождения элемента max заключается в следующем:
Элемент max - это максимум первого элемента и максимум остального списка.
, т. Е.
max(l) is the max of l.data and max(l.next)
Итак, ваш метод должен выглядеть следующим образом:
int max(Node l)
{
if(l == null)
return 0;
else {
int tailMax = max(l.next);
return tailMax > l.data ? tailMax : l.data;
}
}
int max(){
return max(head);
}