Funciones recursivas en Matlab

Reflexionando sobre las funciones recursivas en Matlab, me ha parecido interesante compartir algunas reflexiones y conocimientos al respecto.

¿Qué es la recursividad? Se trata de una función que se llama a sí misma, una o varias veces. Este enfoque es un pilar de la programación funcional y resulta extremadamente útil para abordar determinados problemas.

Veamos un ejemplo práctico.

Imagina que necesitas calcular el factorial de un número (n!). Podríamos definir una función recursiva de esta manera:

function y = fact(x)
if (x<0)
disp("número negativo")
return;
end
if (x<2)
y=1;
return;
else
y=x*fact(x-1);
end
end

La función fact(), por su naturaleza recursiva, se llama a sí misma en la expresión y = x * fact(x - 1).

Ahora, permíteme explicarte cómo opera.

Para comenzar, fact() recibe un número x como entrada.

  • Si x<0
    Ante un x negativo, la función se detiene, ya que el factorial de un número negativo no es definible. En tal caso, se muestra el mensaje "número negativo" y se retorna al programa principal.
    si el número es negativo, el algoritmo finaliza su ejecución
  • Si 0≤x<2
    Si x es un número positivo menor que 2, se devuelve 1 y se termina la recursión, ya que no se realizan más llamadas a sí misma. La instrucción return transfiere el valor 1 a la llamada recursiva previa, retrocediendo hasta cerrar todas las llamadas.
    finalización de la recursión
  • Si x≥2
    Con un x igual o superior a 2, la función calcula el producto de x por el resultado de fact(x - 1), llamándose a sí misma de manera recursiva.
    llamada recursiva de la función

Como ilustración, invoquemos fact() con x = 6.

n=6;
y=fact(n);
disp(y)

function y = fact(x)
if (x<0)
disp("número negativo")
return;
end
if (x<2)
y=1;
return;
else
y=x*fact(x-1 );
end
end

Nota. Es importante recordar que en Matlab, toda función debe definirse al final del script.

Con un valor inicial de x = 6, la función inicia el cálculo del factorial de 6 de manera recursiva.

Se llama a sí misma 5 veces, reduciendo el valor de x en cada llamada.

fact(6)=6*fact(5)
fact(5)=5*fact(4)
fact(4)=4*fact(3)
fact(3)=3*fact(2)
fact(2)=2*fact(1)

En la llamada final, fact(1) = 1, retornando 1 y finalizando las llamadas anteriores.

Si fact(1) = 1, entonces fact(2) resulta ser 2, ya que fact(2) = 2 * fact(1) = 2 * 1 = 2.

fact(6)=6*fact(5)
fact(5)=5*fact(4)
fact(4)=4*fact(3)
fact(3)=3*fact(2)
fact(2)=2*fact(1)=2*1=2

Si fact(2) = 2, entonces fact(3) es 6, ya que fact(3) = 3 * fact(2) = 3 * 2 = 6.

fact(6)=6*fact(5)
fact(5)=5*fact(4)
fact(4)=4*fact(3)
fact(3)=3*fact(2)=3*2=6

Si fact(3) = 6, entonces fact(4) es 24, pues fact(4) = 4 * fact(3) = 4 * 6 = 24.

fact(6)=6*fact(5)
fact(5)=5*fact(4)
fact(4)=4*fact(3)=4*6=24

Así, fact(5) es 120, siendo 5 veces fact(4), que es 24. Por lo tanto, fact(5) = 5 * 24 = 120.

fact(6)=6*fact(5)
fact(5)=5*fact(4)=5*24=120

Y si fact(5) es 120, entonces fact(6) es 720, resultando de 6 * 120.

fact(6)=6*fact(5)=6*120=720

De esta manera se desentraña el proceso.

$$ 6! = 6 \cdot 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 = 720 $$

El factorial de 6, por tanto, es 720.

720

Nota. En este ejemplo, creamos una función recursiva para calcular el factorial de un número, sirviendo como una clara ilustración del concepto de recursión. Sin embargo, en Matlab, también es posible utilizar la función predefinida factorial(x) para obtener el factorial sin necesidad de definir una función adicional.

factorial(6)=720

Además, es factible calcular el factorial de un número mediante una función iterativa, sin recurrir a la recursión. En cualquier caso, el resultado final será el mismo.

Aquí tienes un ejemplo de algoritmo para calcular el factorial utilizando iteración:

algoritmo para calcular el factorial

 
 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin

Funciones en Matlab