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)

Upload: francisca-chavez-salinas

Post on 02-Feb-2016

240 views

Category:

Documents


0 download

TRANSCRIPT

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