Funções Recursivas no PHP: O Guia Definitivo da Recursividade

Recursividade em PHP: Entenda Funções Recursivas Passo a Passo

Existe uma velha piada entre os programadores que diz: "Para entender a recursividade, você primeiro precisa entender a recursividade". Ao final deste tutorial do nosso Curso de PHP, você vai entender exatamente o que isso significa (e vai rir junto!).

Uma função recursiva é, nada mais, nada menos, do que uma função que invoca (chama) a si mesma de dentro do seu próprio bloco de código. É um conceito lindo, matemático e extremamente poderoso na programação.

⚠️ Cuidado com o Loop Infinito (Stack Overflow)

Obviamente, se você apenas escrever o código da função chamando a si mesma, a função de dentro chamará a si mesma, que chamará a si mesma de novo, infinitamente... até esgotar toda a memória RAM do computador ou do servidor.

Para evitar que isso aconteça, toda função recursiva deve, obrigatoriamente, ter um ponto de parada (Base Case). Isso é feito com um simples if/else. Se a condição de parada for atingida, a função para de se invocar; caso contrário, ela continua.

1. Somatório com Recursão

Seja $F(n)$ uma função matemática que representa o somatório de um número $n$. Ou seja, é a soma de todos os números até ele:

$$F(n) = 1 + 2 + 3 + 4 + \dots + (n-1) + n$$

Por exemplo:
$F(4) = 1 + 2 + 3 + 4 = 10$
$F(5) = 1 + 2 + 3 + 4 + 5 = 15$

Porém, note um padrão interessante na matemática. A soma de 5 é exatamente a soma de 4, mais 5:
$F(5) = (1 + 2 + 3 + 4) + 5 = F(4) + 5$

Isso nos dá a nossa fórmula recursiva universal: $F(n) = n + F(n-1)$

A Lógica: Vamos criar uma função somatorio(). Se o argumento for 1 (nosso ponto de parada), ela retorna 1 e o programa acaba. Se não for 1, ela retorna $n$ mais a chamada da própria função para $n-1$.

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Somatório Recursivo - PHP</title>
</head>
<body style="font-family: Arial; padding: 20px;">

    <form action="" method="get">
        Somatório de: <input type="number" name="numero" required />
        <input type="submit" value="Calcular" />
    </form>

    <?php
    if (isset($_GET['numero'])) {
        $numero = intval($_GET['numero']);
        echo "<br><strong>O somatório de {$numero} é:</strong> " . somatorio($numero);
    }

    // Função Recursiva
    function somatorio($numero) {
        // Ponto de Parada
        if ($numero == 1) {
            return 1;
        } else {
            // Chamada Recursiva
            return $numero + somatorio($numero - 1);
        }
    }
    ?>

</body>
</html>

2. Fatorial com Recursão ($n!$)

O Fatorial segue uma lógica absurdamente parecida com a do somatório, mas multiplicando. (Nós já o calculamos usando Laços de Repetição no passado).

Observe:
$5! = 5 \times 4 \times 3 \times 2 \times 1$
$6! = 6 \times (5 \times 4 \times 3 \times 2 \times 1) = 6 \times 5!$

A nossa fórmula recursiva é: $n! = n \times (n-1)!$

O nosso ponto de parada baseia-se na regra matemática universal de que $0! = 1$. Veja o código:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Fatorial Recursivo - PHP</title>
</head>
<body style="font-family: Arial; padding: 20px;">

    <form action="" method="get">
        Fatorial de: <input type="number" name="numero" min="0" required />
        <input type="submit" value="Calcular Fatorial" />
    </form>

    <?php
    if (isset($_GET['numero'])) {
        $numero = intval($_GET['numero']);
        echo "<br><strong>O fatorial de {$numero} é:</strong> " . fat($numero);
    }

    // Função Recursiva
    function fat($numero) {
        // Ponto de Parada
        if ($numero == 0) {
            return 1;
        } else {
            // Chamada Recursiva
            return $numero * fat($numero - 1);
        }
    }
    ?>

</body>
</html>

3. Sequência de Fibonacci com Recursão

A famosa série de Fibonacci é um dos exemplos mais clássicos ensinados nas universidades para treinar recursividade. Na matemática da natureza, os primeiros termos são definidos como:

$F(0) = 0$
$F(1) = 1$

A partir daí, cada novo número é a soma dos dois anteriores. A fórmula recursiva é:
$F(n) = F(n-1) + F(n-2)$

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Fibonacci Recursivo - PHP</title>
</head>
<body style="font-family: Arial; padding: 20px;">

    <form action="" method="get">
        Exibir o Termo Fibonacci (N): <input type="number" name="numero" min="0" required />
        <input type="submit" value="Descobrir" />
    </form>

    <?php
    if (isset($_GET['numero'])) {
        $numero = intval($_GET['numero']);
        echo "<br><strong>O termo {$numero} de Fibonacci é:</strong> " . fibo($numero);
    }

    // Função Recursiva
    function fibo($numero) {
        // Pontos de Parada
        if ($numero == 0 || $numero == 1) {
            return $numero;
        } else {
            // Chamada Recursiva Dupla
            return fibo($numero - 1) + fibo($numero - 2);
        }
    }
    ?>

</body>
</html>

Domine Algoritmos no PHP 🧠

Recursividade é apenas o começo! O verdadeiro poder de um desenvolvedor está em conhecer todas as ferramentas da linguagem. Estude com centenas de exercícios práticos, gabaritados e organizados do zero ao avançado.

Baixar Apostila Completa de PHP

Nenhum comentário: