Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos Binarios Recursividad (2 clases)
Recursividad Se dice que una función es recursiva cuando se define en función de si misma. No todas la funciones pueden llamarse a si mismas, deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a bucles infinitos, o a que el programa termine inadecuadamente. Cuando se llama a una función, se crea un nuevo juego de variables locales, de este modo, si la función hace una llamada a si misma, se guardan sus variables y parámetros. La nueva instancia de la función trabajará con su propia copia de las variables locales, cuando esta segunda instancia de la función retorna, recupera las variables y los parámetros anteriores y continúa la ejecución en el punto en que había sido llamada.
Por ejemplo: Función recursiva para calcular el factorial de un número entero. El factorial se simboliza como n!, se lee como "n factorial", y la definición es: n! = n * (n-1) * (n-2) * ... * 1 No se puede calcular el factorial de números negativos, y el factorial de cero es 1, de modo que una función bien hecha para cálculo de factoriales debería incluir un control para esos casos:
int factorial (int n) { if (n < 0) return 0; else if (n > 1) return n*factorial(n-1); return 1; }
Paso a paso: factorial(4) 1a Instancia n=4 Si n > 1 salida ← 4 * factorial(3) (Guarda el valor de n = 4) 2a Instancia Si n > 1 salida ← 3*factorial(2) (Guarda el valor de n = 3) 3a Instancia Si n > 1 salida ← 2*factorial(1) (Guarda el valor de n = 2) 4a Instancia SI Entraen Else por n=1 → retorna 1 3a Instancia (recupera n=2 ) retorna 2*1=2 2a instancia (recupera n=3 ) retorna 3*2=6 1a instancia (recupera n=4 de la pila) retorna 4*6=24 Valor de retorno → 24
Nota Ejercicio 1 Ejercicio 2 Toda función recursiva se puede resolver de forma Iterativa y viceversa Resolver factorial por Recursividad Resolver la serie de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55… Ejercicio 1 Ejercicio 2
Ejercicio 3 (optativo) Ingresar un número y calcular su sumatoria Debe sumarse todos los número que le anteceden
Ejercicio 4 Hacer una función recursiva llamada potencia Debe tener 2 parámetros: Base y Exponente El resultado de la potencia es float
Ejercicio 5 Hacer el programa Dec2Bin Se ingresa un número decimal y se devuelve el binario correspondiente
String char *b; b es un string que no se le ha asignado tamaño scanf y setpass al cargarlo le asigna tamaño b b contiene la dirección de memoria del primer elemento del string Se dice que b es un puntero al string b le informa donde comienza el string, pero ¿cómo sabe el lenguaje C donde termina el string b? e s t u d i a r \0
String/Punteros printf(“%s”,b) muestra estudiar printf(“%i”,b) muestra la dirección de memoria del primer lugar del string printf(“%i”,*b) muestra el código ASCII de e printf(“%c”,*b) muestra e
Ejercicio 6 Hacer el programa Bin2Dec Se ingresa un número binario y se calcula el valor decimal correspondiente El número binario debe ingresarse como string
Ejercicio 7 (optativo) Hacer un menú con todos los ejercicios de recursividad