Vous êtes sur la page 1sur 4

Algoritmos recursivos de bsqueda

Al igual que en el caso de los algoritmos iterativos, consideraremos dos casos respecto al
estado de los elementos sobre los cuales se desea hacer la bsqueda: que no tengan orden
alguno y que estn ordenados respecto a algn criterio.

La bsqueda secuencial la consideraremos en ambos casos y la bsqueda binaria slo en el


segundo..

Bsqueda secuencial
Cuando hacemos una bsqueda sobre un arreglo del cual no tenemos ms informacin que su
tamao, la idea general, como vimos anteriormente, es recorrer todo el arreglo desde uno de
los extremos hasta el otro y detenerse cuando se encuentre el nmero x que se est buscando
o cuando se haya verificado que x no iguala a algn elemento del arreglo.

El siguiente algoritmo tiene el mismo funcionamiento que el caso iterativo, slo que ahora utiliza
recursin para repetir la bsqueda sobre el resto del arreglo.

funcin buscar (entero a[], entero n, entero x)


comienza
si n = 0 entonces
regresar 0
sino
si a[n] = x entonces
regresar n
si no
regresar buscar (a, n-1, x)
fin si
fin si
fin

Ejemplo: Hacer una prueba de escritorio para el arreglo a = 21, 3, 7, 6, 8, 19, 14, 26, 23, n = 9 y
x = 13.

Llamada n n = 0? a[n] = x? Regresa

1 9 No No 0

2 8 No No 0
3 7 No No 0

4 6 No No 0

5 5 No No 0

6 4 No No 0

7 3 No No 0

8 2 No No 0

9 1 No No 0

10 0 Si 0

Como podemos ver, la funcin recibi 10 llamadas, una principal y nueve recursivas.
Precisamente en la dcima llamada el tamao del arreglo n fue cero, a partir de la cual el valor
que regresa el algoritmo es cero, indicando que x no existe en el arreglo.

Consideremos ahora el caso cuando los elementos del arreglo a estn ordenados, digamos en
forma ascendente. Al igual que en el caso iterativo, podramos aprovechar esta propiedad e
incluir una condicin de control con el fin de detener las llamadas recursivas justo cuando el
algoritmo descubra que no tiene caso buscar a x en cierta regin del arreglo.

funcin buscar (entero a[], entero n, entero x)


comienza
si n = 0 a[n] < x entonces
regresar 0
sino
si a[n] = x entonces
regresar n
si no
regresar buscar (a, n-1, x)
fin si
fin si
fin

Ejemplo: Hacer una prueba de escritorio para el arreglo a = 3, 6, 7, 8, 14, 19, 21, 23, 26, n = 9 y
x = 13.

Llamada n n = 0? a[n] < x? a[n] = x? Regresa


1 9 No No No 0

2 8 No No No 0

3 7 No No No 0

4 6 No No No 0

5 5 No No No 0

6 4 No Si 0

Nuevamente, vemos que es una gran ventaja saber que los elementos estn ordenados de
alguna manera, ya que as evitamos hacer bsquedas innecesarias en regiones del arreglo en
donde evidentemente x no se encuentra.

Bsqueda binaria
Al igual que en el caso iterativo, podemos aprovechar an ms el hecho de que los elementos
de arreglo estn ordenados, haciendo llamadas recursivas nicamente en la regin del arreglo
en donde sabemos que podra estar ubicado el nmero x.

El algoritmo recursivo de bsqueda binaria se muestra a continuacin. Obsrvese que, a


diferencia de todos los algoritmos anteriores, ste no recibe como parmetro de entrada el
tamao del arreglo, sino un par de ndices especificando las posiciones inicial y final del arreglo
en donde se realizar la bsqueda.

funcin buscar (entero a[], entero primero, entero ltimo, entero x)


entero medio
comienza
si primero > ltimo entonces
regresar 0
fin si
medio (primero + ltimo) / 2
si a[medio] = x entonces
regresar medio
si no si a[medio] > x entonces
regresar buscar (a, primero, medio - 1, x)
si no
regresar buscar (a, medio + 1, ltimo, x)
fin si
fin
Ejemplo: Hacer una prueba de escritorio para el arreglo a = 3, 6, 7, 8, 14, 19, 21, 23, 26, n = 9 y
x = 13.

primero ltimo medio primero > a[medio] a[medio] Regresa


Ll. ltimo? = x? > x?

1 1 9 5 No No Si 0

2 1 4 2 No No No 0

3 3 4 3 No No No 0

4 4 4 4 No No No 0

5 5 4 Si 0

Vous aimerez peut-être aussi