Avatar ·

Como implementar recursão em PHP?

Olá a todos! Por favor, me digam como implementar recursão corretamente em PHP. Estou escrevendo uma função para percorrer um array multidimensional e somar todos os valores, mas no final recebo 0 ou um loop infinito.

Aqui está o que tentei:

function recursiveSum($arr) {
    static $sum = 0;
    foreach ($arr as $value) {
        if (is_array($value)) {
            recursiveSum($value);
        } else {
            $sum += $value;
        }
    }
    return $sum;
}

$data = [1, [2, 3], [4, [5, 6]]];
echo recursiveSum($data); // esperado: 21

O problema é que, ao chamar a função repetidamente com arrays diferentes, o resultado se acumula por causa da variável static. Também tentei passar a soma por referência (&$sum), mas a função retorna valores inesperados. Outra opção com variável global também não é adequada — isso viola os princípios de código limpo.

Espero que a função retorne a soma de todos os números em um array de qualquer aninhamento, e que cada chamada