Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    42

    [C++] Ricerca binaria con funzione ricorsiva

    Ciao a tutti!

    Come da titolo, mi è stato assegnato da implementare una ricerca binaria utilizzando una funzione ricorsiva. Il programma funziona perfettamente, ma l'output si ripete all'infinito... dove sbaglio?

    codice:
    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    
    
    using namespace std;
    
    
    void ricercaBinaria(int i, int f, char p[][4], char k[]);
    
    
    main()
    {
        char parola[5][4]={"ada", "ivo", "leo", "ugo", "zoe"}, ricerca[256], ripeti='y';
        int inizio, fine, i, valido;
        
        while(ripeti=='y')
        {
            inizio=0;
            fine=4;
            
            system("cls");
            cout<<"\t\tRICERCA BINARIA\n\n";
            for(i=0;i<5;i++) cout<<i+1<<". "<<parola[i]<<"\n";
    
    
            cout<<"\nInserisci la parola da cercare: ";
            cin>>ricerca;
            
            ricercaBinaria(inizio, fine, parola, ricerca);
            
            valido=0;
            
            while(valido!=1)
            {
                system("cls");
                cout<<"\t\tRICERCA BINARIA\n\n";
                cout<<"Vuoi ripetere la ricerca? (y/n): ";
                cin>>ripeti;
                
                if(90>=ripeti && ripeti>=65) ripeti=ripeti+32;
                
                switch(ripeti)
                {
                    case 'y':valido=1;
                    break;
                    case 'n':valido=1;
                    break;
                    default:cout<<"\nScelta non valida. Premere un tasto per continuare . . . ";
                    getch();
                }
            }
        }
        
        cout<<"\nProgramma terminato. ";
        
        system("pause");
    }
    
    
    void ricercaBinaria(int i, int f, char p[][4], char k[])
    {
            int c;
            
            while(i<=f)
            {                        
                c=(i+f)/2;
                
                if(strcmp(p[c], k) == 0)
                {
                    i=f+2;
                    cout<<"\nParola trovata nella posizione "<<c+1<<".";
                    cout<<"\n\nPremere un tasto per continuare . . . ";
                    getch();
                    return;
                }
                
                if(strcmp(p[c], k) < 0) ricercaBinaria(c+1, f, p, k);
                else ricercaBinaria(i, c-1, p, k);
            }
            
            if(i==f+1)
            {            
                cout<<"\nParola non trovata. Premere un tasto per continuare . . . ";
                getch();
                return;
            }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    42
    Ho risolto! :P

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ovvero?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    42
    Ho cercato un po' in giro ed ho scoperto che i cicli nelle funzioni ricorsive non devono starci, così ho tolto il while ed ha funzionato

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.