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