Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Esercizio su Ricorsione

    Salve a tutti,

    la settimana scorsa ho fatto un esame di programmazione in cui mi veniva proposto il seguente esercizio:

    "Data una matrice A(MxM) determinare con una funzione booleana ricorsiva se almeno una colonna di indice dispari è uguale ad una riga di indice pari letta dall'ultimo al primo elemento.
    Es.

    3 1 7 2 6
    4 4 8 9 5
    2 5 5 4 1
    2 5 5 4 1
    1 2 5 6 7

    Risposta: colonna 1, riga 2 -> TRUE".

    Ora, questo esercizio non l'ho svolto ma ho comunque passato la prova scritta e adesso il problema è eventualmente spiegare la soluzione di questo esercizio alla prova orale.

    Ho abbozzato una prima soluzione che è questa:

    codice:
    bool Funz(int A[][M],int i,int j,int h,int k){
         if(j>=M)
    	return false;
         else if(i>=M)
    	return true;
         else if(h>=M)
            return Funz(A,0,j+2,0,M-1);
         else if(A[i][j]==A[h][k])
    	return Funz(A,i+1,j,h,k-1);
         else
    	return Funz(A,0,j,h+2,M-1);
    }
    Il problema che mi pongo è che utilizzo 4 indici per confrontare righe e colonne e quindi vi chiedo se fosse possibile utilizzare solo 2 indici per il confronto in modo da semplificare la funzione.

    Aspetto vostre risposte! Grazie in anticipo!

    Edit: ho dimenticato di precisare le precondizioni della funzione che sono i=0,j=1,h=0,k=M-1;
    inoltre ho corretto le chiamate ricorsive...aspetto sempre vostre risposte

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Adesso non ho guardato se la tua funzione è giusta o no, però visto che l' hai fatta completamente ricorsiva, per me non è possibile farla utilizzando meno indici.
    Altrimenti perderesti di vista l' elemento che stai confrontando.
    Visto che l' esercizio chiedeva di farla ricorsiva, forse era permesso anche farla "semi-ricorsiva" nel senso che usavi la ricorsione solo per passare da una colonna all' altra, ma poi la colonna la scandivi in maniera iterativa.Allora si che avresti potuto usare due indici anzichè quattro.

  3. #3
    Per quanto riguarda il funzionamento della funzione posso dirti che fa quello che deve fare...
    Inoltre il porofessore preferisce soluzioni ricorsive a soluzioni iterative quindi escluderei quest'ultima...però forse c'è un modo per poter utilizzare solo 2 indici, magari sfruttando anche la dimensione della matrice o con qualche trucco matematico...in caso contrario mi accontento della mia soluzione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.