Está en la página 1de 5

Olvera Chvez Jos Carlos

Recursividad
Se dice que una funcin es recursiva cuando dicha funcin se define en trminos de la misma funcin. Es importante recordar que no todas la funciones pueden llamarse a s mismas, deben estar diseadas especialmente para comportarse de manera recursiva, de otro modo dichas funciones podran conducir a bucles infinitos, o a que el programa termine inadecuadamente. Por ejemplo, podramos pensar en la creacin de un algoritmo que produzca el resultado de un nmero factorial, la definicin iterativa de dicho algoritmo seria: int factorial (int n) { prod = 1; for ( x = n; x > 0; x-- ){ prod *= x; } return prod; }

La definicin iterativa es sencilla, pero no resulta tan intuitiva, en cambio, uno podra analizar ms detalladamente el problema y generar una definicin recursiva para una funcin factorial que podra resultar ms intuitiva y sencilla de implementar: n! = n * (n-1)! !0 = 1 Podemos observar en dicha definicin que el factorial de un nmero es el producto de dicho nmero por el factorial del nmero entero menor prximo y as consecutivamente, adems podemos ver que el factorial del nmero cero es 1, lo que nos indica un caso de base o un caso de parada que ya no requiere ms llamadas consecutivas. A partir de este caso base se realiza un retroceso en las llamadas que obtiene como resultado el producto del caso base por cada uno de los valores n del nmero en las llamadas. 3! = 3 * 2! 2! = 2 * 1! 1! = 1 * 0! 0! = 1

Olvera Chvez Jos Carlos

1! = 1 * 1 2! = 2 * 1 3! = 3 * 2 6

Podemos observar que cada caso es reducido a un caso simple hasta que se alcanza el caso base de 0!, el cual es definido directamente como 1. En la lnea 4 obtenemos un valor que est definido directamente y no se realiza el factorial de ningn otro nmero. De esta manera podemos realizar un retro seguimiento (backtrack) de la lnea 4 a la 1, regresando el valor calculado en cada lnea evaluando el resultado de las lneas previas. Analizando lo anterior concluimos que en una definicin recursiva las instancias complejas de un proceso se define en trminos de instancias ms simples, estando stas definidas en forma explicita, facilitando el diseo de la funcin. El problema del factorial de n en forma recursiva se escribira asi: int factorial( int n ) { if ( n == 0 ) return 1; else return n * factorial( n-- ); }

Ejemplo 2 El producto Una forma de realizar un programa que obtenga el producto de dos nmeros es con el siguiente cdigo:

Olvera Chvez Jos Carlos

La forma recursiva para realizar este problema de productos seria la siguiente, a este cdigo se le agregan algunas impresiones para que se vea el proceso.

Revisando el cdigo, vemos que tambin recibe 2 parmetros 'a' y 'b', y si lo notan, hay condicional If/Else los cuales servirn para marcar el lmite del ciclo. Mientras 'a' sea mayor que 0, entonces se retorna el mismo mtodo MAS 'b', aplicando la recursividad por llamarse a s mismo, y con los parmetros son (a1,b), para ir descontando 'a' y no hacerlo infinito.

Olvera Chvez Jos Carlos

1*-Suponiendo que los valores recibidos en la funcin es a=4 y b=3, entonces el mtodo retorna al mismo mtodo ms 'b' , pero con los parmetros del mtodo en el retorno de (a-1,b) ese decir, (3,3). 2*-Se manda los parmetros tales que a=3 y b=3, entonces sue vuelve a llamar a s mismo. 3*-Y esta vez es a=2 y b=3. 4*-Por ltima vez se repite el proceso y entonces a=1 y b=3 , Ahora que se trata de llamar a s misma la funcin, no cumple con la condicional If ya que a=1 y b=3 , haciendo referencia a la condicin "a>1" no se cumple, entonces aplica el Else, regresando el puro valor de 'b'.

Contando las veces que fueron, son 4 veces las que se sumaron, por lo cual se puede notar que 'a' sirvi de contador.

Ventajas de la Recursin Soluciones simples, claras. Soluciones elegantes. Soluciones a problemas complejos. Desventajas de la Recursin: INEFICIENCIA Sobrecarga asociada con las llamadas a sub-algoritmos Una simple llamada puede generar un gran nmero de llamadas recursivas. (Fact(n) genera n llamadas recursivas) La claridad compensa la sobrecarga? El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas sin fcil solucin iterativa. La ineficiencia inherente de algunos algoritmos recursivos.

Olvera Chvez Jos Carlos

Casteos o casting
Definicin: El casteo (casting) es un procedimiento para transformar una variable primitiva de un tipo a otro, o transformar un objeto de una clase a otra clase siempre y cuando haya una relacin de herencia entre ambas. Existen distintos tipos de casteo (casting) de acuerdo a si se utilizan tipos de datos o clases.

El operador cast realiza este proceso, es decir convierte datos, variables o expresiones a un nuevo tipo de dato, su formato es: (nvotipo) dato , var, exp; Ejemplo: // declaracin int alfa; // Asignacin alfa = 20; // Cambio de tipo (float) alfa; Ejemplo: (int) 3.1416; * En este ejemplo se est convirtiendo un float a int, recordar que en este caso ya no se tendrn los decimales. * Como nota importante se puede hacer cast solo con tipos de datos, no entre tipos de datos y objetos de una clase numrica. Como nota importante este operador resuelve los dos problemas pendientes: - El de la divisin entre enteros. - El tipo de dato especifico que requieren las funciones.

También podría gustarte