Hola Valentina, mis comentarios son:
1) Cuando v==[] yo devolvería max=[] y min=[], porque el máximo de nada y el mínimo de nada es nada. Probá max([]) vas a ver que te devuelve [].
2) Cuando llamás recursivamente, quitas el primero y el último elemento, y ni siquiera usas luego v(1). Entonces se pierden esos datos. Yo sacaría el último MaximaMinimo(v(1:n-1)). También podría sacar el primero, pero asumamos que sacás el último para explicar lo siguiente.
3) El resultado de [max,min]=MaximaMinimo(v(1:n-1)) no lo usas. Ese max y ese min se pierden. Se supone que max y min traen el máximo y mínimo de v(1:n-1), entonces, lo que hay que hacer ahora es compararlos contra el último elemento, contra v(n), que es el que sacaste de v. Quizá ese v(n) es mayor que max o menor que min.
4) Para hacer esto, en lugar de "if v(n)>v(n-1)" debería compararse v(n) contra max:
if v(n)>max
max=v(n); o sea, si v(n) es mayor que el máximo del resto del vector, entonces v(n) es el máximo.
5) El else está también mal, porque si no es el máximo no quiere decir que sea obligatoriamente el mínimo. Debería sustituirse ese else por un elseif, para evaluar si efectivamente v(n) es menor que el mínimo.
elseif v(n)<min
min=v(n);
endif
Le agregaría un 6) referido al nombre de la función: ¿maximAminimO? :-)
Espero que haya quedado clara la explicación.
Eduardo