RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad...

19
RECURSIVID AD ivelación unciones Menú ectores String emoria Dinámica ecursividad unteros ilas olas istas rchivos rchivos de texto rchivos Binarios (2 clases) (2 clases)

Transcript of RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad...

Page 1: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

RECURSIVIDAD

1. NivelaciónFunciones

MenúVectores

String2. Memoria Dinámica

RecursividadPunterosPilasColasListas

3. ArchivosArchivos de textoArchivos Binarios

(2 clases)(2 clases)

Page 2: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

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.

Page 3: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

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:

Page 4: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

int factorial (int n) { if (n < 0) return 0; else if (n > 1) return n*factorial(n-1); else return 1;}

Page 5: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

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 InstanciaSi n > 1 salida ← 2*factorial(1) (Guarda el valor de n

= 2) 4a InstanciaSI 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=24Valor de retorno → 24

Page 6: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

Nota

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 1Ejercicio 1

Ejercicio 2Ejercicio 2

Page 7: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.
Page 8: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.
Page 9: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

Ejercicio 3 (optativo)

Ingresar un número y calcular su sumatoria

Debe sumarse todos los número que le anteceden

Page 10: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.
Page 11: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

Ejercicio 4

Hacer una función recursiva llamada potencia

Debe tener 2 parámetros: Base y Exponente

El resultado de la potencia es float

Page 12: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.
Page 13: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

Ejercicio 5

Hacer el programa Dec2Bin Se ingresa un número decimal y se

devuelve el binario correspondiente

Page 14: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.
Page 15: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

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 stringSe dice que b es un puntero al stringb le informa donde comienza el string, pero

¿cómo sabe el lenguaje C donde termina el string b?

ee ss tt uu dd ii aa rr \0\0

Page 16: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

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

Page 17: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

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

Page 18: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.
Page 19: RECURSIVIDAD 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas 3. Archivos Archivos de texto Archivos.

Ejercicio 7 (optativo)

Hacer un menúcon todos los ejercicios de recursividad