1 Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos Binarios Recursividad (2 clases)
2 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.
3 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:
4 int factorial (int n) { if (n < 0) return 0; else if (n > 1) return n*factorial(n-1); return 1; }
5 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 > 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
6 Nota Ejercicio 1 Ejercicio 2Toda 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
7
8
9 Ejercicio 3 (optativo) Ingresar un número y calcular su sumatoriaDebe sumarse todos los número que le anteceden
10
11 Ejercicio 4 Hacer una función recursiva llamada potenciaDebe tener 2 parámetros: Base y Exponente El resultado de la potencia es float
12
13 Ejercicio 5 Hacer el programa Dec2BinSe ingresa un número decimal y se devuelve el binario correspondiente
14
15 String char *b; b es un string que no se le ha asignado tamañoscanf 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
16 String/Punteros printf(“%s”,b) muestra estudiarprintf(“%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
17 Ejercicio 6 Hacer el programa Bin2DecSe ingresa un número binario y se calcula el valor decimal correspondiente El número binario debe ingresarse como string
18
19 Ejercicio 7 (optativo) Hacer un menú con todos los ejercicios de recursividad