Originariamente inviato da anna2312
Ma che vuol dire deve essere ricorsiva?
Ah ottimo, a quanto leggo il Fortran non consente funzioni ricorsive, sarà per questo che non ne hai mai sentito parlare.
Per la ricorsione ti consiglio di leggere qui ma in ogni caso non risolve il problema. L'algoritmo di ricerca binaria è un classico esempio di algoritmo che si risolve con un approccio Divide et Impera, paradigma che trova la sua massima esaltazione proprio nella ricorsione. È comunque possibile scrivere anche una funzione iterativa, e in effetti è quello che hai fatto tu, solo che la sintassi orribile del Fortran (che conosco pochissimo e che ricorda tantissimo l'assembly, come del resto è normale che sia date le sue origini storiche) e il fatto che tu non abbia utilizzato i tag code per postare il codice mi avevano fatto fare confusione.

La routine di ricerca binaria è strutturata abbastanza bene, ma ci sono 3 errori fondamentali:

1) all'interno della funzione hai ridefinito il parametro x come integer, laddove invece nel programma chiamante questo è un real. Ridefiniscilo come real anche nella funzione;

2) sbagli l'aggiornamento di max e min: se v(med) < x devi proseguire con la ricerca nella seconda metà del vettore, non nella prima, quindi anziché essere max = med - 1 devi scrivere min = med + 1. Viceversa nel caso in cui risulti v(med) > x;

3) nel predicato di uscita del ciclo iterativo hai scritto if (ricerca_binaria==1.or.max<=min) ma al posto di <= scrivi solo <.

Così dovrebbe andare. Facci sapere e soprattutto la prossima volta posta il codice indentato con i tag appositi come segue:

codice:
Real function ricerca_binaria(n,v,x)

	Integer, intent(in)::n
	Real,dimension(100),intent(in)::v
	Real, intent(in)::x

	!variabili locali
	integer::max, min,med

	max = n
	min = 1
	ricerca_binaria = 0

	do
		med = (max+min)/2

		if (v(med) == x) then
			ricerca_binaria = 1
		else if (v(med) < x) then
			min = med+1
		     else
			max = med-1
		end if

		if (ricerca_binaria==1.or.max<min) exit
	end do

	return

end function
PS: il Fortran a livello accademico, purtroppo, è ben più diffuso di quanto si possa credere. Si usa anche a "Matematica e informatica" presso la SUN di Caserta, ad esempio. Probabilmente Il C ai matematici fa particolarmente schifo.