PDA

Visualizza la versione completa : [C++] Ricerca binaria con funzione ricorsiva


kaine25
04-03-2015, 18:24
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?



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

kaine25
04-03-2015, 21:16
Ho risolto! :P

oregon
04-03-2015, 23:14
Ovvero?

kaine25
09-03-2015, 21:07
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 :D

Loading