Recursividad. Introducción a la programación

Documentos relacionados
Estatutos de Control C# Estatutos de Decisión (Selección)

Semana de las Matemáticas e Ingeniería. Desarrollo de algoritmos recursivos empleando la aplicación PseInt

Guía práctica de estudio 05: Diagramas de flujo

Profesor(a): M. A. Zeferino Galarza Hernández

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

MANUAL DE RUBY (PARTE V) Luis José Sánchez González

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

Computación II. Introducción a Visual Basic

I.E.S. CUADERNO Nº 5 NOMBRE: FECHA: / / Inecuaciones. Resolver inecuaciones de primer y segundo grado con una incógnita.

Ecuaciones de primer grado

Estructuras de control

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Diseño Estructurado de Algoritmos

Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Práctica 2: Análisis de sensibilidad e Interpretación Gráfica

Programación en java. Estructuras algorítmicas

TEMA 2 POTENCIAS NOMBRE Y APELLIDOS... HOJA 1 - FECHA...

Desigualdades con Valor absoluto

T0. TRANSFORMADAS DE LAPLACE

1. Polinomios. 2. Ecuaciones de segundo grado. 3. Soluciones de una ecuación de segundo. grado. Problemas. 4. Sistemas de ecuaciones

Algoritmos y Programas

Taller de Resolución de Problemas Computacionales

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas

Glosario. equation: ecuación. divide: dividir. grouping problem: problema de agrupar. divided by: dividido por. division: división.

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Diagramas de secuencia

UNIDAD DE APRENDIZAJE I

Problemas de Recursividad

Matemáticas Discretas TC1003

Formato para prácticas de laboratorio

Aritmética de Enteros

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

TEMA 3: FRACCIONES 1º ESO MATEMÁTICAS

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

INSTITUTO TECNOLÓGICO DE NUEVO LAREDO ING. EN SISTEMAS COMPUTACIONALES UNIDAD: 2

Fundamentos matemáticos. Tema 8 Ecuaciones diferenciales

Algoritmo para Calcular Logaritmos

MANUAL DEL PROGRAMA EXCEL LABORAL

Estructuras de Control

Programando solución de desigualdades en Excel

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Universidad Tec Milenio: Profesional IO04001 Investigación de Operaciones I. Tema # 9

7.4. UTILIDADES DE LAS PILAS

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

ECUACIONES.

PROGRAMACIÓN UNIDADES

LENGUAJE. Tema 2 Elementos de un programa

La lección de hoy es sobre resolver valores absolutos por Inecualidades. El cuál es la expectativa para el aprendizaje del estudiante SEI.2.A1.

Guía número 1. Métodos numéricos. Universidad de san buenaventura de Cali

Aprende a contar ángulos dividiendo una circunferencia, realiza operaciones y busca patrones de repetición. Afna tu puntería, gira y dispara!

ESCUELA DE INFORMÁTICA

Universidad Ricardo Palma

Tema 3 Álgebra Matemáticas I 1º Bachillerato. 1

Funciones. Parámetros por valor

Estructuras de Decisión Simples y Dobles

UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA VICERRECTORADO ACADÉMICO COORDINACION DE PRE-GRADO PROYECTO DE CARRERA DE INGENIERIA INDUSTRIAL

Ángulos complementarios Un par de ángulos son complementarios si la suma resultante de sus medidas es.

2. Planeando una misión a Marte

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Operadores. Javier Fernández Rivera -

1) El primer paso es ubicarse en la celda donde quiere que aparezca el resultado de la función, la celda D18.

: ING4520 Programación Matemática Semestre II : Juan Pérez Retamales : Francisco Vergara Matías Mujica Manuel Pavez

Demostramos lo que aprendimos

El lenguaje C. 1. Identificadores, constantes y variables

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Mapas Felices GUÍA DOCENTE. Tiempo de la lección : 20 Minutos DESCRIPCIÓN GENERAL DE LA LECCIÓN OBJETIVOS DE LA LECCIÓN

Suma y resta de ángulos. Multiplicación de un ángulo por un entero. División de un ángulo entre un entero. Conversión de Grados a radianes y viceversa

= RETURN =3 7-. ELSE K

Bloque 2. El propósito principal de este bloque es el estudio de las operaciones. Números decimales: sus operaciones y propiedades

NÚMEROS ENTEROS. En la recta numérica se pueden representar los números naturales, el cero y los números negativos.

Matemáticas Básicas para Computación

Operación que hiciste en la calculadora

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

TEMA 1.- POLINOMIOS Y FRACCIONES ALGEBRAICAS

Tema 3: Multiplicación y división.

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 3: Relaciones, Funciones, y Notación Asintótica

Funciones como Subprogramas en C++

Materia: Matemática de 5to Tema: Método de Cramer. Marco Teórico

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Profesorado de Nivel Medio y Superior en Biología Matemática - 1º Cuatrimestre Año 2013 FUNCIÓN CUADRÁTICA

Productos notables. Se les llama productos notables (también productos especiales) precisamente porque son muy utilizados en los ejercicios.

= 310 (1 + 5) : 2 2 = = = 12 ( 3) ( 5) = = 2 = ( 4) + ( 20) + 3 = = 21

Unidad didáctica: Leer para aprender. Asignatura: Matemáticas. Título: La División

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Nombre de la asignatura: Programación Básica. Créditos: Objetivo de aprendizaje

Identificación. Propuesta didáctica: unidad Didáctica. Resumen: QUINTO de primaria matemática. Nivel: Primario. Grado: Quinto

Fracciones Presentación Parte 2

Las operaciones con números irracionales


TEMA 4. ESTRUCTURAS DE CONTROL

Universidad Tec Milenio: Profesional HG04002 Análisis de Decisiones I

FACULTAD DE INGENIERÍA

A veces, un número no se dividirá equitativamente. Cuando esto sucede, tenemos un resto.

Transcripción:

Recursividad Introducción a la programación I semestre, 2016

Concepto general Un concepto que está definido utilizando para este propósito el propio concepto que se está definiendo. Es un proceso de repetición de operaciones similares. Resolver un problema en términos de sí mismo. La definición de recursividad es recursiva... porque debemos entender recursividad para entender recursividad.

Ejemplo (en general) Este es un dibujo de una mano que dibuja otra mano que está dibujando una mano... M.C. Escher, Drawing hands (1948) Paleis Lange Voorhout CC BY-SA ekenit @ Flickr

Concepto en matemática (y computación) La resolución de un problema recursivo usualmente consta de una serie de llamadas que deben ser resueltas antes de poder dar una solución. El comportamiento recursivo se puede apreciar cuando tenemos una definición/función en la cual se incluye: Un caso de solución básico o caso base. Una serie de operaciones/instrucciones que reducen el problema actual a resolver al caso de solución básico.

Ejemplos en matemática (y computación) Números naturales La definición de los números naturales plantea: Cero es un número natural. (Axioma) El sucesor de un número natural también es natural. Verifiquemos con el número 5...

Ejemplos en matemática (y computación) Números naturales 5 es natural? No se. El sucesor de 4 es 5. La definición de los números naturales plantea: Si 4 es natural entonces 5 lo es también. 4 es natural? No se. El sucesor de 3 es 4. Cero es un número natural. (Axioma) Si 3 es natural entonces 4 lo es también. El sucesor de un número natural también es natural. 3 es natural? No se. El sucesor de 2 es 3. Si 2 es natural entonces 3 lo es también. 2 es natural? No se. El sucesor de 1 es 2. Verifiquemos con el número 5... Si 1 es natural entonces 2 lo es también. 1 es natural? No se. El sucesor de 0 es 1. Si 0 es natural entonces 1 lo es también. 0 es natural (por axioma/baso case) Plantee un algoritmo para resolverlo

Ejemplos en matemática (y computación) Potencias La n-ésima potencia de x es: Xn = X * X (n-1) Si n = 0; entonces Xn = 1 Algoritmo: Resultado es 1, si n es igual a cero. Sino, el resultado es el producto de x y la potencia n-ésima menos uno de x. Tome algún número y verifique que cumpla con la definición.

Ejemplos en matemática (y computación) Potencias La n-ésima potencia de x es: Para x = 3 y n = 5, o en otras palabras tres elevado a la cinco ( 35 ): 35 = 3 * 34 Xn = X * X (n-1) Si n = 0; entonces Xn = 1 = 3 * ( 3 * 33 ) = 3 * (3 * ( 3 * 32 ) ) = 3 * (3 * (3 * (3 * 31) ) ) Algoritmo: = 3 * (3 * (3 * (3 * (3 * 30 ) ) ) ) Resultado es 1, si n es igual a cero. = 3 * (3 * (3 * (3 * (3 * 1 ) ) ) ) Sino, el resultado es el producto de x y la potencia n-ésima menos uno de x. = 3 * (3 * (3 * (3 * 3 ) ) ) = 3 * (3 * (3 * 9 ) ) Tome algún número y verifique que cumpla con la definición = 3 * (3 * 27 ) = 3 * 81 = 243

Time spiral CC BY-SA gadl @ Flickr

Ejercicio/Ejemplo en Python #Cuenta el número de dígitos #Entradas: un número #Salidas: el numero de dígitos o Error01 si no es un numero #Restricciones: entrada debe ser un número. def num_digitos(numero) Escriba una función en Python para resolver este problema, sin que el número sea de un tamaño específico de dígitos (anteriormente resolvimos un ejercicio similar)

Ejemplo en Python #Cuenta el número de dígitos #Entradas: un número #Salidas: el numero de dígitos o Error01 si no es un numero #Restricciones: entrada debe ser un número. def num_digitos(numero): if not isinstance(numero,int): return Error01 #'Error' else: if(numero == 0): return 0 else: return 1 + num_digitos(numero // 10)

Cómo se ejecuta esta función? >>> num_digitos(4925) 1 + num_digitos(492) # 4925 // 10 = 492 1 + 1 + num_digitos(49) # 492 // 10 = 49 1 + 1 + 1 + num_digitos(4) # 49 // 10 = 4 1 + 1 + 1 + 1 + num_digitos(0) # 4 // 10 = 0 1 + 1 + 1 + 1 + 0 # numero = 0 0 >>> 4 5 invocaciones a la misma función para resolver el problema. Este tipo de solución recursiva se conoce como de pila. Revíselo en el depurador.

pain in black - philip glass version CC BY-NC Pierre Metivier @ Flickr

Ejercicios 1. Haga una función eficiente y recursiva para multiplicar los dígitos de un número. multi_digitos(numero) >>> multi_digitos(3257) >>> multi_digitos(32057) 210 0 Al finalizar, utilizando papel y lápiz, escriba la pila de llamados para la invocación: >>> multi_digitos(3257)

Ejercicios 2. Haga una función recursiva que indique si un número tiene al menos un siete como dígito: >>> tiene_siete(486) False >>> tiene_siete(175043) True 3. Modifique el programa anterior para que reciba un parámetro adicional digito. El programa ahora va a indicar si existe digito en el numero. >>> tiene_digito(numero, digito) True or False >>> tiene_digito(3456789, 4) True >>> tiene_digito(3456789, 2) False

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica. 18 http://creativecommons.org/licenses/by-sa/3.0/cr/ http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*

Recursividad Introducción a la programación I semestre, 2016

Concepto general Un concepto que está definido utilizando para este propósito el propio concepto que se está definiendo. Es un proceso de repetición de operaciones similares. Resolver un problema en términos de sí mismo. La definición de recursividad es recursiva... porque debemos entender recursividad para entender recursividad.

Ejemplo (en general) Este es un dibujo de una mano que dibuja otra mano que está dibujando una mano... M.C. Escher, Drawing hands (1948) Paleis Lange Voorhout CC BY-SA ekenit @ Flickr Este es un ejemplo de recursividad en el Arte, utilizando el concepto general: la explicación del dibujo nos lleva otra vez a la misma explicación que estamos haciendo. Escuchar guitarra y vos del disco Eco2. Que viva la ciencia que viva la poesía... Es cierto que no hay arte sin emoción, Y que no hay precisión sin artesania... Hay fórmulas hasta para describir la espiral de una caracola... hay manos capaces de fabricar herramientas con las que se hacen máquinas para hacer

Concepto en matemática (y computación) La resolución de un problema recursivo usualmente consta de una serie de llamadas que deben ser resueltas antes de poder dar una solución. El comportamiento recursivo se puede apreciar cuando tenemos una definición/función en la cual se incluye: Un caso de solución básico o caso base. Una serie de operaciones/instrucciones que reducen el problema actual a resolver al caso de solución básico. Ejemplo (intento de metáfora con la vida real): Vamos a hacer un viaje en bus desde la SIU hasta San Pedro de Montes de Oca. Problema: SIU San pedro (chepe) 1. Si estamos en San Pedro ya llegamos, sino buscar un bus que nos acerque. 2. tomar un bus: *a. Siu Alajuela: Problema ahora Alajuela San pedro. *b. Alajuela San José: Problema ahora San José san pedro. *c- San josé San pedro: Problema ahora San Pedro San pedro (caso 1).

Ejemplos en matemática (y computación) Números naturales La definición de los números naturales plantea: Cero es un número natural. (Axioma) El sucesor de un número natural también es natural. Verifiquemos con el número 5... Sucesor es el número que sigue o sea, sucesor(x) = x + 1

Ejemplos en matemática (y computación) Números naturales 5 es natural? No se. El sucesor de 4 es 5. La definición de los números naturales plantea: Si 4 es natural entonces 5 lo es también. 4 es natural? No se. El sucesor de 3 es 4. Cero es un número natural. (Axioma) Si 3 es natural entonces 4 lo es también. El sucesor de un número natural también es natural. 3 es natural? No se. El sucesor de 2 es 3. Si 2 es natural entonces 3 lo es también. 2 es natural? No se. El sucesor de 1 es 2. Verifiquemos con el número 5... Si 1 es natural entonces 2 lo es también. 1 es natural? No se. El sucesor de 0 es 1. Si 0 es natural entonces 1 lo es también. 0 es natural (por axioma/baso case) Plantee un algoritmo para resolverlo Se puede utilizar lógica inversa. Pasar esto a algoritmo no es complicado, si lo pensamos para python entonces lo mejor será hacerlo a la inversa... Dado un número: - si es cero es natural, - es natural si el anterior es natural[ anterior(x) = x-1 ] (ver apuntes: clase10 semana05). Ver código:

Ejemplos en matemática (y computación) Potencias La n-ésima potencia de x es: Xn = X * X (n-1) Si n = 0; entonces Xn = 1 Algoritmo: Resultado es 1, si n es igual a cero. Sino, el resultado es el producto de x y la potencia n-ésima menos uno de x. Tome algún número y verifique que cumpla con la definición.

Ejemplos en matemática (y computación) Potencias La n-ésima potencia de x es: Para x = 3 y n = 5, o en otras palabras tres elevado a la cinco ( 35 ): 35 = 3 * 34 Xn = X * X (n-1) Si n = 0; entonces Xn = 1 = 3 * ( 3 * 33 ) = 3 * (3 * ( 3 * 32 ) ) = 3 * (3 * (3 * (3 * 31) ) ) Algoritmo: = 3 * (3 * (3 * (3 * (3 * 30 ) ) ) ) Resultado es 1, si n es igual a cero. = 3 * (3 * (3 * (3 * (3 * 1 ) ) ) ) Sino, el resultado es el producto de x y la potencia n-ésima menos uno de x. = 3 * (3 * (3 * (3 * 3 ) ) ) = 3 * (3 * (3 * 9 ) ) Tome algún número y verifique que cumpla con la definición = 3 * (3 * 27 ) = 3 * 81 = 243

Time spiral CC BY-SA gadl @ Flickr Habrá que invertir tiempo en solucionar esto.

Ejercicio/Ejemplo en Python #Cuenta el número de dígitos #Entradas: un número #Salidas: el numero de dígitos o Error01 si no es un numero #Restricciones: entrada debe ser un número. def num_digitos(numero) Escriba una función en Python para resolver este problema, sin que el número sea de un tamaño específico de dígitos (anteriormente resolvimos un ejercicio similar) Problema: hacer un programa que cuente la cantidad de dígitos de un número. num_digitos(123) 3 num_digitos(123456) 6 Recordar que para hacer un número más pequeño usamos la división entera y para sacar el valor del dígito menos significativo una operación de residuo o

Ejemplo en Python #Cuenta el número de dígitos #Entradas: un número #Salidas: el numero de dígitos o Error01 si no es un numero #Restricciones: entrada debe ser un número. def num_digitos(numero): if not isinstance(numero,int): return Error01 #'Error' else: if(numero == 0): return 0 else: return 1 + num_digitos(numero // 10) Problema: hacer un programa que cuente la cantidad de dígitos de un número. num_digitos(123) 3 num_digitos(123456) 6

Cómo se ejecuta esta función? >>> num_digitos(4925) 1 + num_digitos(492) # 4925 // 10 = 492 1 + 1 + num_digitos(49) # 492 // 10 = 49 1 + 1 + 1 + num_digitos(4) # 49 // 10 = 4 1 + 1 + 1 + 1 + num_digitos(0) # 4 // 10 = 0 1 + 1 + 1 + 1 + 0 # numero = 0 0 >>> 4 5 invocaciones a la misma función para resolver el problema. Este tipo de solución recursiva se conoce como de pila. Revíselo en el depurador. Asegurarme que todos lo corran en el debugger Revíselo en el depurador.

pain in black - philip glass version CC BY-NC Pierre Metivier @ Flickr http://www.flickr.com/photos/feuilllu/296739207/ Hasta acá la clase 10.

Ejercicios 1. Haga una función eficiente y recursiva para multiplicar los dígitos de un número. multi_digitos(numero) >>> multi_digitos(3257) 210 >>> multi_digitos(32057) 0 Al finalizar, utilizando papel y lápiz, escriba la pila de llamados para la invocación: >>> multi_digitos(3257)

Ejercicios 2. Haga una función recursiva que indique si un número tiene al menos un siete como dígito: >>> tiene_siete(486) False >>> tiene_siete(175043) True 3. Modifique el programa anterior para que reciba un parámetro adicional digito. El programa ahora va a indicar si existe digito en el numero. >>> tiene_digito(numero, digito) True or False >>> tiene_digito(3456789, 4) True >>> tiene_digito(3456789, 2) False

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica. 18 http://creativecommons.org/licenses/by-sa/3.0/cr/ http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*