ejercicio recursivo

ejercicio recursivo

de Valentina Soldini Blanco -
Número de respuestas: 2

Buenas, mi consulta era a ver si alguien me podria ayudar  como hacer una funcion recursiva que reciba un vector de enteros y devuelva el maximo y el minimo de ese vector.

Porque yo lo intente asi, pero no me salio:

function [max,min]=MaximaMinimo(v)

  n=length(v);

     if n==0

        max=0;

        min=0;

  elseif n==1

        max=v;

        min=v;

  else 

       [max,min]=MaximaMinimo(v(2:n-1));

       if v(n)>v(n-1)

         max=v(n);

       else

        min=v(n-1);

    endif

  endif

endfunction

En respuesta a Valentina Soldini Blanco

Re: ejercicio recursivo

de Eduardo Fernandez -

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