Função Recursiva

Bom dia.
O que tem de errado nessa função recursiva que não passa do primeiro FOR?

function verificarRepetido($resultadoArray)
{
$primosAteOitenta = array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79);

        for ($i = 0, $j=4; $i < count($resultadoArray); $i++, $j--) {
            if($resultadoArray[$i] == $resultadoArray[$j]) {
                $resultadoArray[$i] = rand(1,80);
                verificarRepetido($resultadoArray);
            }
        } // SÓ SAI DAQUI, QUANDO NÃO HAVER MAIS REPETIDOS

        echo "depois do primeiro FOR de REPETIDOS";
        print_r($resultadoArray);

        for ($i = 0; $i < count($resultadoArray); $i++) {
            for($j = 0; $j < count($primosAteOitenta); $j++) {
                if($resultadoArray[$i] == $primosAteOitenta[$j]){
                    $resultadoArray[$i] = rand(1,80);
                    verificarRepetido($resultadoArray);
                }
            }
        } // SÓ SAI DAQUI, QUANDO NÃO HAVER NÚMEROS PRIMOS

        sort($resultadoArray);


        for($i = 0; $i < count($resultadoArray); $i++) { // FOR DA IMPRESSÃO DO ARRAY COM VÍRGULAS EM FORMATO CONJUNTO
            if($i == count($resultadoArray) - 1){
                echo "$resultadoArray[$i]";
            }
            echo "$resultadoArray[$i], ";
        }
    }

Por que você inicializa o $j como 4?
Veja, a partir da 5ª iteração, você já está tentando acessar uma posição do vetor que não existe:
1ª $j = 4
2ª $j = 3
3ª $j = 2
4ª $j = 1
5ª $j = 0
6ª $j = -1 —> Não existe posição -1 no array, né?

Por isso ele não sai daí

1 curtida

Agora:
Parece estar resolvido, segue o código:

function verificarRepetido($resultadoArray)
{
$primosAteOitenta = array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79);

        for ($i = 0, $j = count($resultadoArray) - 1; $i < count($resultadoArray); $i++, $j--) {
            for($j = 0; $j < count($resultadoArray); $j++) {
                if($i == $j){
                    continue;
                }
                if($resultadoArray[$i] == $resultadoArray[$j]){
                    $resultadoArray[$i] = rand(1,80);
                    verificarRepetido($resultadoArray);
                }
            }
        } // SÓ SAI DAQUI, QUANDO NÃO HAVER MAIS REPETIDOS

        /*echo "depois do primeiro FOR de REPETIDOS";
        print_r($resultadoArray);*/

        for ($i = 0; $i < count($resultadoArray); $i++) {
            for ($j = 0; $j < count($primosAteOitenta); $j++) {
                if ($resultadoArray[$i] == $primosAteOitenta[$j]) {
                    $resultadoArray[$i] = rand(1, 80);
                    verificarRepetido($resultadoArray);
                }
            }
        } // SÓ SAI DAQUI, QUANDO NÃO HAVER NÚMEROS PRIMOS

        sort($resultadoArray);


        for ($i = 0; $i < count($resultadoArray); $i++) { // FOR DA IMPRESSÃO DO ARRAY COM VÍRGULAS EM FORMATO CONJUNTO
            if ($i == count($resultadoArray) - 1) {
                echo "$resultadoArray[$i]";
                break;
            }
            echo "$resultadoArray[$i], ";
        }
    }

Anteriormente:
O ideal seria eu colocar aí na variável $j, o mesmo que coloquei pra $resultadoArray, mas é que o $resultado array tem 5 elementos.
Deixei assim, agora, e mesmo assim não passa:

($i = 0, $j=count($resultadoArray) - 1; $i < count($resultadoArray); $i++, $j–) {