Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78

    [C] ricorsione ricerca minimo

    Salve vorrei cercare di capire con che ordine vengono eseguite le chiamate alla funzione min_search_rec_bin in questo algoritmo ricorsivo:



    codice:
    /*
    Cerca il minimo nella porzione di vettore v [ first .. last ].
    Ritorna il valore dell ' indice del vettore c o r r i s p o n d e n t e al minimo
    */
    int min_search_rec_bin ( int v [] , int first , int last ) {
    int ris_h , ris_l , pivot ;
    /* Caso Base */
    i f ( first == last )
    return ( first );
    /* Divide e Impera */
    pivot = ( first + last ) / 2;
    ris_h = min_search_rec_bin (v , first , pivot );
    ris_l = min_search_rec_bin (v , pivot + 1, last );
    /* Combina */
    i f (v[ ris_h ] < v[ ris_l ])
    retrn ris_h ;
    e l s e
    return ris_l ;
    }
    Come si gestisce la ricorsione doppia in questo caso?
    Ultima modifica di SSSS90; 18-05-2014 a 22:07

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non esiste una "ricorsione doppia" ... per capire la ricorsione devi avere chiaro il concetto di "stack di chiamate".

    Non è affatto complesso.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    perdonami per la mia superficialità intendevo: un algoritmo a ricorsione doppia nel senso che nel suo corpo sono presenti più chiamate a
    se stesso...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    Ho chiaro come funziona in questo caso più semplice con tutto il ragionamento con lo stack come dici tu...ma nel caso di algoritmi a ricorsione doppia non riesco a venirne a capo-


    codice:
    /*
    Cerca il minimo nella porzione di vettore v [ first .. last ].
    Ritorna il valore dell ' indice del vettore c o r r i s p o n d e n t e al minimo
    */
    i n t min_search_rec ( i n t v [] , i n t first , i n t last ) {
    i n t ris ;
    /* Caso Base */
    i f ( first == last )
    r e t u r n ( first );
    /* Divide e Impera */
    ris = min_search_rec (v , first + 1, last );
    /* Combina */
    i f (v[ ris ] < v[ first ])
    r e t u r n ris ;
    e l s e
    r e t u r n first ;
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.