Funções recursivas no Matlab

Recentemente, estive aprofundando meus conhecimentos sobre funções recursivas no Matlab e gostaria de compartilhar algumas reflexões sobre o assunto.

O que é recursão? Em essência, uma função recursiva é aquela que se autoinvoca uma ou mais vezes. Este conceito, essencial na programação funcional, revela-se extremamente útil na resolução de problemas específicos.

Vamos a um exemplo prático:

Imagine que você deseja calcular o fatorial de um número (n!). Uma abordagem seria definir uma função recursiva desta forma:

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

A função fact(), nesse contexto, é um exemplo clássico de função recursiva, pois ela se chama na expressão y = x * fact(x - 1).

Explicando seu funcionamento:

Primeiramente, a função fact() recebe um número x. Vejamos o processo:

  • Se x<0
    Caso x seja negativo, a função cessa sua execução, pois o fatorial de um número negativo não existe. A função então exibe "número negativo" e interrompe a execução com o comando return.
    se o número for negativo, o algoritmo termina a execução
  • Se 0≤x<2
    Para x positivo e menor que 2, a função retorna 1, finalizando a recursão sem novas autoinvocações. O comando return passa o valor 1 para a chamada recursiva anterior, encerrando assim o ciclo.
    o encerramento da recursão
  • Se x≥2
    Com x maior ou igual a 2, a função realiza a operação x vezes fact(x - 1), invocando-se recursivamente.
    a chamada recursiva da função

Por exemplo, ao chamar a função fact() com x = 6, o processo seria:

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

Observação: Uma função em Matlab deve ser sempre definida ao final do script.

A função processa o valor de entrada x = 6 e inicia o cálculo do fatorial de 6! de maneira recursiva.

A função é invocada 5 vezes (recursão), reduzindo o número a cada chamada.

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)

Na última invocação, fact(1) = 1, a função retorna 1, finalizando as chamadas recursivas anteriores.

Assim, se fact(1) = 1, então fact(2) = 2, pois 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

E seguindo essa lógica, se fact(2) = 2, então fact(3) = 6, já que fact(3) = 3 * fact(2) = 3 * 2 = 6, e assim sucessivamente.

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

Portanto, com fact(3) = 6, fact(4) será 24, pois fact(4) = 4 * fact(3) = 4 * 6 = 24, e assim por diante.

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

Concluímos que fact(5) é 120, e consequentemente, fact(6) será 720.

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

E assim se desvenda o mistério!

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

Logo, o fatorial de 6 é 720.

720

Observação: Embora neste exemplo tenhamos criado uma função recursiva para calcular o fatorial de um número, é importante lembrar que, no Matlab, você também pode utilizar a função predefinida factorial(x) para obter o mesmo resultado sem a necessidade de definir uma função adicional.

factorial(6)=720

Alternativamente, é possível calcular o fatorial de um número por meio de uma função iterativa, sem recorrer à recursão. De qualquer forma, o resultado final será sempre o mesmo.

Veja um exemplo de algoritmo para calcular o fatorial usando iteração:

algoritmo para calcular o fatorial

 
 

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

FacebookTwitterLinkedinLinkedin

Funções no Matlab