Funzione Ricorsiva elementi divisibili in un array

di il
5 risposte

Funzione Ricorsiva elementi divisibili in un array

Salve a tutti sono nuovo e chiedo aiuto a voi esperti programmatori di C++
Il mio problema è questo. Devo svolgere un esercizio con la ricorsione in cui mi si chiede questa precisa cosa: "Definire una funzione ricorsiva che conta quanti elementi di un array di interi sono divisibili per un numero intero D (senza uso di puntatori e riferimenti)".
Ora io ho pensato il seguente codice (non posto il main per brevità ):
int conta = 0; // variabile globale

int conta_divisibili (int a[], int n, int d){



    int resto;

    if (n == 0){

        return 0;

    }else

    if (n==1){

        if (a[0]%d == 0){

            conta++;

        }

    }else{

    conta =  conta_divisibili(a,n-1,d);

    }

    return conta;
}
Ma ovviamente questo codice non funziona e non riesco a capire il perchè... Qualcuno di voi sa come aiutarmi??
Scusate la mia ignoranza, noobaggine, miseria intellettuale!!! Grazie in anticipo!!!

5 Risposte

  • Re: Funzione Ricorsiva elementi divisibili in un array

    
    conta =  conta_divisibili(a,n-1,d);
    
    io vedo che quì conta prende un solo valore e l'ultimo valore è definito dal n == 0 e quindi credo che avrai 0 alla fine. Non posso verificare la funzione dentro il debug al momento ma prova a cambiare sta riga così:
    
    conta +=  conta_divisibili(a,n-1,d);
    
  • Re: Funzione Ricorsiva elementi divisibili in un array

    Mi correggo:
    
    int conta_divisibili (int a[], int n, int d)
    {
    
    	int conta = 0;
    	if (n == 0)
    	{
            return 0;
        }
    	else if (a[n-1]%d == 0)
    	{
    		conta++;
    		conta +=  conta_divisibili(a,n-1,d);
        }
    	else
    	{
    	    conta +=  conta_divisibili(a,n-1,d);
        }
    
        return conta;
    }
    
    Questo dovrebbe essere OK.
  • Re: Funzione Ricorsiva elementi divisibili in un array

    IMHO la ricorsione in questo caso non centra un fico secco. Bisogna applicarla dove non esiste alternativa valida .
    btw @OP senza la variabile globale sarebbe meglio
  • Re: Funzione Ricorsiva elementi divisibili in un array

    Skynet, non ti conosco ma ti voglio un sacco bene.
    Grazie mille... Quindi l'errore stava nel fatto che io a conta gli facevo prendere un solo valore, che era 0 (1 nel caso che la condizione fosse verificata al primo elemento array). Grazie mille
    Però come senso del concetto ci siamo?? Nel senso, secondo te ci sono a livello concettuale sulla ricorsione?? (Ripeto che è solo un esercizio che verifica il grado di preparazione di uno studente, messo a disposizione da un prof nelle sue dispense, quindi anche se non c'entra niente apparentemente, in realtà è utile per far comprendere la ricorsione nelle funzioni )Comunque di nuovo infinite Grazie Skynet!!!!!!
  • Re: Funzione Ricorsiva elementi divisibili in un array

    La ricosione va applicata dove ha senso come detto anche da Max (vedi serie di Fibonacci oppure MCD http://it.wikipedia.org/wiki/Massimo_comun_divisor).
    Cmq come concetto si ci siamo ma sto esempio è già difficile da fare perche un ciclo while lo eseguirebbe in minor tempo e senza troppi fronzoli.
Devi accedere o registrarti per scrivere nel forum
5 risposte