Вы находитесь на странице: 1из 8

PRACTICO 2

1.- Que es Recursividad? Primero debemos decir que la recursividad no es una estructura de datos, sino que es una tcnica de programacin que nos permite que un bloque de instrucciones se ejecute n veces. Remplaza en ocasiones a estructuras repetitivas. Este concepto ser de gran utilidad para el captulo de la estructura de datos tipo rbol. La recursividad es un concepto difcil de entender en principio, pero luego de analizar diferentes problemas aparecen puntos comunes. En Java los mtodos pueden llamarse a s mismos. Si dentro de un mtodo existe la llamada a s mismo decimos que el mtodo es recursivo. Cuando un mtodo se llama a s mismo, se asigna espacio en la pila para las nuevas variables locales y parmetros. Al volver de una llamada recursiva, se recuperan de la pila las variables locales y los parmetros antiguos y la ejecucin se reanuda en el punto de la llamada al mtodo. 2.- Que es programacin Recursiva? Es mucho ms difcil desarrollar una solucin recursiva en un lenguaje determinado para resolver un problema especifico cuando no se tiene un algoritmo. No es solo el programa sino las definiciones originales y los algoritmos los que deben desarrollarse. En general, cuando encaramos la tarea de escribir un programa para resolver un problema no hay razn para buscar una solucin recursiva. La mayora de los problemas pueden resolverse de una manera directa usando mtodos no recursivos. Sin embargo, otros pueden resolverse de una manera ms lgica y elegante mediante la recursin. Volviendo a examinar la funcin factorial. El factor es, probablemente, un ejemplo fundamental de un problema que no debe resolverse de manera recursiva, dado que su solucin iterativa es directa y simple. Sin embargo, examinaremos los elementos que permiten dar una solucin recursiva. Antes que nada, puede reconocerse un gran nmero de casos distintos que se deben resolver. Es decir, quiere escribirse un programa para calcular 0!, 1!, 2! Y as sucesivamente. Puede identificarse un caso "trivial" para el cual la solucin no recursiva pueda obtenerse en forma directa. Es el caso de 0!, que se define como 1. El siguiente paso es encontrar un mtodo para resolver un caso "complejo" en trminos de uno ms "simple", lo cual permite la reduccin de un problema complejo a uno ms simple. La transformacin del caso complejo al simple resultara al final en el caso trivial. Esto significara que el caso complejo se define, en lo fundamental, en trminos del ms simple. 3.- Para qu sirve la programacin Recursiva? La Recursividad, es un concepto bastante importante y bien bsico de la programacin. Sin embargo es bastante difcil de asimilar al principio. Se supone que es algo que se va entendiendo con prctica y tiempo.

La mejor definicin sin duda de la recursin, es la encontrada en el diccionario hacker: Por ejemplo GNU, es un acrnimo recursivo (GNUs Not Unix), ya que la G en GNU, significa GNU, cuya G significa GNU, y as recursivamente Pensar de forma recursiva es complicado, y no es un proceso intuitivo.

En programacin, una funcin es recursiva cuando se llama a s misma. A continuacin un ejemplo para intentar entender recursividad. A m me viene bien para practicarlo para mi examen de algoritmos en marzo. Espero que quede entendible!

Uno de los ejemplos ms clsicos es el factorial de un nmero. Intenta seguir la explicacin razonando cada paso. Para cualquier entero positivo N, el factorial de N (que se expresa como N!) es el producto (multiplicacin) de todos los enteros menor a l:

1! = 1 2! = 1 x 2 = 2 3! = 1 x 2 x 3 = 6 4! = 1 x 2 x 3 x 4 = 24 5! = 1 x 2 x 3 x 4 x 5 = 120 6! = 1 x 2 x 3 x 4 x 5 x 6 = 720

Ahora, repasando atentamente, se puede ver que el factorial de cada nmero incluye el factorial de todos los nmeros anteriores a l. Lo escrito en corchetes rectos a continuacin es una referencia, no a nivel matemtico: 2! es 1[1!] x 2 3! es (1 x 2)[2!] x 3

Y as sucesivamente. Para cualquier entero N mayor a 1, podemos decir que el factorial de N es igual al factorial del nmero anterior a N multiplicado por N. La frmula N! = (N-1)! x N. Vuelve a la lista de factoriales de 1 a 6. Busca en cada caso los trminos que son factorial del nmero anterior para darte cuenta. Entonces se podra decir que una buena prctica es encontrar el factor en el resultado que se repite. Pasando esto a funcin en C, podemos hacer una funcin a la que le pasamos un nmero, y nos devuelve el factorial: 4.- Cuales son las estructuras que se utilizan en la programacin recursiva?

Diseo de Estructuras recursivas

Ya hemos visto algunos ejemplos de funciones recursivas. Una funcin es recursiva cuando se llama a s misma. Una vez que uno se acostumbra a su uso, se comprueba que la recursin es una forma mucho ms natural que la iteracin de expresar un gran nmero de funciones y procedimientos. Recordemos el ejemplo tpico de funcin recursiva, el factorial:

(dfeine (factorial x) (if (= x 0) 1 (x * (factorial (- x 1)))))

La formulacin matemtica de la recursin es sencilla de entender, pero su implementacin en un lenguaje de programacin no lo es tanto. El primer lenguaje de programacin que permiti el uso de expresiones recursivas fue el LISP. En el momento de su creacin exista ya el Fortran, que no permita que una funcin se llamase a s misma. Ya sabemos cmo es un algoritmo recursivo. Hemos visto varios ejemplos utilizando nmeros, identificadores o listas. Pero cmo disear un algoritmo recursivo? Para resolver un problema de forma recursiva debes:

Descomponer el problema principal en alguna versin ms simple, que puedas resolver llamando a la propia funcin recursiva Confiar en la recursin para resolver esta versin ms simple del problema y que va a devolver su solucin Obtener la solucin al problema completo a partir de la solucin de la versin ms simple.

La frase confa en la recursin quiere decir que cuando ests analizando el funcionamiento de un programa recursivo y veas una llamada recursiva debes confiar en que esta llamada va a devolver el resultado que se pretende. Es til escribir y pensar en los procedimientos recursivos de forma declarativa, teniendo en cuenta lo que hacen y no cmo lo hacen. Es til pensar en la formulacin recursiva del problema de una forma matemtica, analtica o grfica antes de ponerse a programar. Es muy til tambin probar con algunos ejemplos concretos. Cundo para el algoritmo? Cuando el problema es lo ms simple posible y ya no se puede simplificar ms: este es el caso base. Debemos entonces devolver un valor concreto, la recursin ya ha terminado.

5.- Explique que es el factorial de un nmero? El factorial para todo entero positivo n, el factorial de n o n factorial se define como el producto de todos los nmeros enteros positivos desde 1 (es decir, los nmeros naturales) hasta n. Por ejemplo,

La operacin de factorial aparece en muchas reas de las matemticas, particularmente en combinatoria y anlisis matemtico. De manera fundamental, el factorial de n representa el nmero de formas distintas de ordenar n objetos distintos (elementos sin repeticin). Este hecho ha sido conocido desde hace varios siglos, en el s. XII por los estudiosos hindes. La notacin actual n! fue usada por primera vez por Christian Kramp en 1803. La definicin de la funcin factorial tambin se puede extender a nmeros no naturales manteniendo sus propiedades fundamentales, pero se requieren matemticas avanzadas, particularmente del anlisis matemtico. 6.- Explique en qu consiste la sucesin de Fibonacci? Verdaderamente es una serie muy interesante y de formula sencilla, veamos En matemticas, la sucesin de Fibonacci es la siguiente sucesin infinita de nmeros naturales: 1,1,2,3,5,8,13,21,34,55,89,144... La sucesin inicia con 0 y 1, y a partir de ah cada elemento es la suma de los dos anteriores. A cada elemento de esta sucesin se le llama nmero de Fibonacci. Esta sucesin fue descrita en Europa por Leonardo de Pisa, matemtico italiano del siglo XIII tambin conocido como Fibonacci. Tiene numerosas aplicaciones en ciencias de la computacin, matemticas y teora de juegos. Tambin aparece en configuraciones biolgicas, como por ejemplo en las ramas de los rboles, en la disposicin de las hojas en el tallo, en la flora de la alcachofa y en el arreglo de un cono. Los nmeros de Fibonacci aparecen en numerosas aplicaciones de diferentes reas. Por ejemplo, en modelos de la crianza de conejos o de plantas, al contar el nmero de cadenas de bits de longitud n que no tienen ceros consecutivos y en una vasta cantidad de contextos diferentes.

La sucesin de Fibonacci en la naturaleza La gran mayora de los rboles parecen crecer siguiendo la sucesin de Fibonacci: El tronco (1) se divide en una rama grande (1), esta rama se divide en dos (2), luego, cada una de ellas se divide en 3 (3) ramas ms pequeas, y as sucesivamente. La sucesin de Fibonacci.- La sucesin de Fibonacci es la sucesin de nmeros: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... Cada nmero se calcula sumando los dos anteriores a l.

El 2 se calcula sumando (1+1) Anlogamente, el 3 es slo (1+2), Y el 5 es (2+3), y sigue!

Ejemplo: el siguiente nmero en la sucesin de arriba sera (21+34) = 55

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, ...

La regla.- La sucesin de Fibonacci se puede escribir como una "regla" (lee sucesiones y series): La regla es: xn = xn-1 + xn-2 donde:

xn es el trmino en posicin "n" xn-1 es el trmino anterior (n-1) xn-2 es el anterior a ese (n-2)

Por ejemplo el sexto trmino se calculara as: x6 = x6-1 + x6-2 = x5 + x4 = 5 + 3 = 8

7.- Explique en qu consiste la Torre de Hani? Las Torres de Hani es un juego cuya solucin se simplifica mucho si se piensa como un problema recursivo. Se tienen 3 palos de madera, que llamaremos palo izquierdo, central y derecho. El palo izquierdo tiene ensartados un montn de discos concntricos de tamao decreciente, de manera que el disco mayor est abajo y el menor arriba. El problema consiste en mover los discos del palo izquierdo al derecho respetando las siguientes reglas: Slo se puede mover un disco cada vez. No se puede poner un disco encima de otro ms pequeo. Despus de un movimiento todos los discos han de estar en alguno de los tr es palos. Se quiere disear un programa que lea por teclado un valor entero N y escriba la secuencia de pasos necesarios para resolver el problema de las torres de Hani para N discos.

Вам также может понравиться