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; } }

Rispondi quotando