La recursividad es un concepto fundamental en programación orientada a objetos que permite que una función se llame a sí misma. Se compone de un caso base y un caso recursivo. Se ilustran ejemplos como el factorial y la serie de Fibonacci. Finalmente, se explica cómo resolver recursivamente el problema clásico de las Torres de Hanoi mediante la división en subproblemas.
Este documento describe funciones recursivas y cómo resolver problemas de forma recursiva. Explica conceptos como caso base, paso recursivo, variables de recursión y dominio de variables. Incluye ejemplos de funciones recursivas como factorial, Fibonacci, conversión de decimal a binario y potenciación. También compara recursividad e iteración y analiza ventajas y desventajas de la recursividad.
La recursividad es un concepto fundamental en matemáticas y computación que implica resolver un problema reduciéndolo a uno o más subproblemas. Algunos ejemplos de recursividad son el factorial, la búsqueda binaria y el cálculo del producto de números. La recursividad es útil para estructuras de datos como listas y árboles y tiene aplicaciones en inteligencia artificial, fractales y la sucesión de Fibonacci.
Este documento trata sobre la recursividad y provee ejemplos de algoritmos recursivos como factorial, torre de Hanoi y ordenamiento por inserción. Explica que la recursividad permite que una función se llame a sí misma de forma directa o indirecta y distingue entre recursividad simple, múltiple y anidada. Además, describe la técnica "divide y vencerás" como forma de resolver problemas de tamaño grande dividiéndolos en subproblemas más pequeños.
Este documento discute la recursividad y proporciona ejemplos. La recursividad implica definir una función en términos de sí misma mediante llamadas recursivas. Se ilustran conceptos como recursión simple, múltiple y anidada. Se proveen ejemplos como el cálculo factorial, la serie Fibonacci y el triángulo de Pascal resueltos de forma recursiva.
Este documento presenta información sobre la recursividad. Explica que la recursividad es una alternativa a los ciclos para implementar estructuras de repetición, donde los módulos se llaman a sí mismos de forma recursiva. Incluye ejemplos de procedimientos y funciones recursivas como el cálculo factorial y la serie de Fibonacci, mostrando cómo cada problema se resuelve en términos de instancias más pequeñas del mismo problema hasta alcanzar un caso base.
Este documento trata sobre la recursividad en programación. Explica que la recursividad permite definir un número infinito de objetos mediante un enunciado finito y que los procedimientos y funciones recursivas se llaman a sí mismas para resolver un problema. También describe los componentes clave de un algoritmo recursivo como el caso base y la parte recursiva, y los diferentes tipos de recursividad como la recursividad simple, mutua e indirecta.
El documento describe la recursividad. Explica que una función recursiva se llama a sí misma, ya sea directamente o indirectamente a través de otra función. Luego detalla los pasos que realiza una computadora al ejecutar una función recursiva, incluido almacenar variables locales, encontrar el método, hacer copias de argumentos, pasar argumentos y restaurar variables locales. También compara recursividad e iteración, señalando que la recursividad puede simplificar problemas pero es menos eficiente en tiempo y espacio.
El documento presenta información sobre el cálculo integral indefinido. Brevemente describe los antecedentes históricos del cálculo integral con Newton y Leibniz. Luego define la función primitiva de una función y presenta tres propiedades básicas de las primitivas. Finalmente introduce la definición de la integral indefinida y algunas reglas para calcular este tipo de integrales.
Este documento describe funciones recursivas y cómo resolver problemas de forma recursiva. Explica conceptos como caso base, paso recursivo, variables de recursión y dominio de variables. Incluye ejemplos de funciones recursivas como factorial, Fibonacci, conversión de decimal a binario y potenciación. También compara recursividad e iteración y analiza ventajas y desventajas de la recursividad.
La recursividad es un concepto fundamental en matemáticas y computación que implica resolver un problema reduciéndolo a uno o más subproblemas. Algunos ejemplos de recursividad son el factorial, la búsqueda binaria y el cálculo del producto de números. La recursividad es útil para estructuras de datos como listas y árboles y tiene aplicaciones en inteligencia artificial, fractales y la sucesión de Fibonacci.
Este documento trata sobre la recursividad y provee ejemplos de algoritmos recursivos como factorial, torre de Hanoi y ordenamiento por inserción. Explica que la recursividad permite que una función se llame a sí misma de forma directa o indirecta y distingue entre recursividad simple, múltiple y anidada. Además, describe la técnica "divide y vencerás" como forma de resolver problemas de tamaño grande dividiéndolos en subproblemas más pequeños.
Este documento discute la recursividad y proporciona ejemplos. La recursividad implica definir una función en términos de sí misma mediante llamadas recursivas. Se ilustran conceptos como recursión simple, múltiple y anidada. Se proveen ejemplos como el cálculo factorial, la serie Fibonacci y el triángulo de Pascal resueltos de forma recursiva.
Este documento presenta información sobre la recursividad. Explica que la recursividad es una alternativa a los ciclos para implementar estructuras de repetición, donde los módulos se llaman a sí mismos de forma recursiva. Incluye ejemplos de procedimientos y funciones recursivas como el cálculo factorial y la serie de Fibonacci, mostrando cómo cada problema se resuelve en términos de instancias más pequeñas del mismo problema hasta alcanzar un caso base.
Este documento trata sobre la recursividad en programación. Explica que la recursividad permite definir un número infinito de objetos mediante un enunciado finito y que los procedimientos y funciones recursivas se llaman a sí mismas para resolver un problema. También describe los componentes clave de un algoritmo recursivo como el caso base y la parte recursiva, y los diferentes tipos de recursividad como la recursividad simple, mutua e indirecta.
El documento describe la recursividad. Explica que una función recursiva se llama a sí misma, ya sea directamente o indirectamente a través de otra función. Luego detalla los pasos que realiza una computadora al ejecutar una función recursiva, incluido almacenar variables locales, encontrar el método, hacer copias de argumentos, pasar argumentos y restaurar variables locales. También compara recursividad e iteración, señalando que la recursividad puede simplificar problemas pero es menos eficiente en tiempo y espacio.
El documento presenta información sobre el cálculo integral indefinido. Brevemente describe los antecedentes históricos del cálculo integral con Newton y Leibniz. Luego define la función primitiva de una función y presenta tres propiedades básicas de las primitivas. Finalmente introduce la definición de la integral indefinida y algunas reglas para calcular este tipo de integrales.
La recursividad divide problemas complejos en subproblemas más pequeños del mismo tipo hasta alcanzar un caso base simple. Se ilustran ejemplos como el factorial, la serie de Fibonacci y el problema de las Torres de Hanoi. La recursividad es útil para problemas que pueden expresarse como una secuencia de pasos gobernados por reglas no ambiguas.
El documento explica la recursividad, definida como un proceso que se define en términos de sí mismo. Explica que todo proceso recursivo debe tener una definición base y recursiva. Usa como ejemplos el cálculo factorial de forma recursiva y la serie de Fibonacci.
Este documento describe la recursividad, incluyendo su definición, tipos de procedimientos recursivos y ejemplos como el factorial, Fibonacci, triángulo de Pascal. La recursividad se basa en la llamada repetida de un método dentro de su propia definición hasta alcanzar un caso base. Ofrece ventajas como menos líneas de código pero también desventajas como un mayor uso de memoria y tiempo de procesamiento.
Este documento trata sobre algoritmos recursivos. Explica que un método recursivo contiene llamadas a sí mismo y debe tener una condición de salida para evitar un bucle infinito. También cubre las condiciones que debe cumplir un algoritmo recursivo y cuando es apropiado usar recursividad frente a iteración.
Este documento presenta un reporte de investigación sobre recursividad. Explica conceptos clave como recursión directa e indirecta y características de funciones recursivas como el caso base y caso recursivo. También discute ventajas de programación recursiva como su cercanía a descripciones matemáticas. Finalmente, concluye que recursividad es fundamental en matemáticas y computación para implementar estructuras de repetición.
Este documento describe los algoritmos recursivos, incluyendo su definición como una función que se llama a sí misma, recursividad indirecta donde una subrutina llama a otra formando ciclos, y ejemplos de recursión lineal y múltiple. Explica que aunque los algoritmos recursivos son menos eficientes que los iterativos, hacen los programas más simples y comprensibles. También cubre el uso de pilas para almacenar valores recursivos y cómo diseñar algoritmos recursivos mediante la determinación de casos base y generales.
Este documento introduce el cálculo integral y las reglas básicas para calcular integrales indefinidas. Explica que una antiderivada es la función original cuya derivada es conocida, y presenta reglas para calcular antiderivadas de funciones elementales como potencias, constantes y constantes multiplicadas por funciones. También cubre la notación y definición formal de la integral indefinida.
El documento describe la técnica "divide y vencerás" para resolver problemas de forma eficiente dividiéndolos en subproblemas más pequeños. Explica los requisitos para aplicarla, el esquema recursivo general y análisis de complejidad. Luego presenta ejemplos como búsqueda de máximo/mínimo, ordenación, selección, multiplicación de enteros y matrices.
El documento presenta una introducción a los conceptos de programación dinámica y algoritmos voraces. Explica que la programación dinámica resuelve problemas de manera bottom-up almacenando soluciones óptimas de subproblemas, mientras que los algoritmos voraces toman decisiones locales óptimas que conducen a una solución global óptima. También describe algoritmos como el de Floyd para caminos más cortos, Prim y Kruskal para árboles de extensión mínima.
Este documento trata sobre la recursividad y los métodos recursivos. Explica que la recursividad implica definir un proceso en términos de sí mismo, y que un método recursivo es aquel que puede llamarse a sí mismo. Presenta ejemplos de recursividad matemática como los fractales y la función factorial. Luego describe cómo implementar métodos recursivos en programación y los dos tipos de recursividad: directa e indirecta. Finalmente, resuelve problemas como Fibonacci, potencias y suma de naturales usando recursividad.
Este documento introduce el algoritmo de ordenamiento Merge Sort y el problema de selección. Explica que Merge Sort es un algoritmo divide y vencerás que ordena un vector dividiéndolo en la mitad, ordenando cada mitad de forma recursiva y luego combinando las mitades ordenadas. Tiene un tiempo de ejecución de O(n log n) y es un algoritmo estable. También introduce el problema de selección, que busca encontrar el elemento de rango k en un vector, y propone una solución basada en cribas que es lineal en el mejor de los casos.
1. El documento describe algoritmos divide y vencerás y sus ejemplos de encontrar el elemento mayoritario y ordenar con quicksort. 2. Estos algoritmos dividen recursivamente un problema en subproblemas más pequeños hasta alcanzar casos base triviales. 3. También compara estos algoritmos con enfoques alternativos como fuerza bruta o ordenar y buscar, señalando que divide y vencerás es más eficiente.
Capítulo 7 sincronización de procesos 09 01-2012ecuatareas
Este documento presenta tres algoritmos para resolver el problema de la sección crítica entre dos hilos. El Algoritmo 1 usa una variable turno compartida que indica qué hilo puede acceder a la sección crítica. El Algoritmo 2 usa una matriz de banderas para cada hilo. El Algoritmo 3 combina la variable turno y la matriz de banderas. También describe soluciones basadas en hardware como test-and-set e intercambio y el uso de semáforos para controlar el acceso a secciones críticas.
Sección 3.6 "Transformada Z unilateral" de la unidad Transformada Z y sus aplicaciones del curso de Procesamiento Digital de Señales de la Universidad Autónoma de Nayarit
Este documento presenta la solución a un taller de control de sistemas con 5 ejercicios resueltos en Matlab y Simulink. El primer ejercicio involucra obtener transformadas de Laplace e inversas de varias funciones. El segundo ejercicio caracteriza una planta experimentalmente. El tercer ejercicio modela un circuito RLC. Los ejercicios 4 y 5 involucran modelar sistemas en Simulink y analizar su estabilidad. El documento provee detalles completos sobre cómo resolver cada punto del taller.
El documento presenta diferentes técnicas de integración como la integración por partes, sustitución trigonométrica, integración de funciones racionales mediante fracciones parciales e integrales trigonométricas. Explica cómo aplicar estas técnicas a diferentes tipos de funciones y ofrece una estrategia general para identificar la técnica apropiada al integrar una función.
Este documento describe la recursividad, incluyendo su definición, tipos (simple, múltiple, anidada, cruzada), mecánica (caso base, caso general, uso de pila), diseño y ventajas/desventajas. La recursividad implica definir un proceso en términos de sí mismo, y puede ser una alternativa a la iteración para resolver problemas recursivamente definidos.
Control de trayectoria de manipulador robótico de Juan Camarena
Este documento describe el diseño y análisis de controladores para un brazo robótico Mitsubishi de 4 grados de libertad. Se modela la dinámica del robot usando el método de Lagrange-Euler y SimMechanics. Se analizan tres tipos de controladores: PID clásico, control por torque computado optimizado con algoritmos genéticos, y controlador neuro-fuzzy. Los controladores se comparan usando el modelo ideal de Lagrange y el modelo más realista de SimMechanics. Los resultados muestran que el controlador PID tiene un desempeño insuficiente
La recursividad es un concepto fundamental en matemáticas y computación que implementa estructuras de repetición de manera diferente a los ciclos. Una función recursiva consta de un caso base y un caso recursivo donde la función se llama a sí misma con parámetros más cercanos al caso base. Un ejemplo es calcular factorial de manera recursiva donde el caso base es 0! = 1 y el caso recursivo es n! = n * (n-1)!.
Unidad 3 c5-control/ANALISIS DE LA RESPUESTA EN EL TIEMPODavinso Gonzalez
El documento analiza la respuesta transitoria de sistemas de control en tiempo discreto a una entrada escalón. Explica que la respuesta presenta oscilaciones amortiguadas antes de alcanzar el estado permanente y define parámetros como tiempo de retardo, levantamiento y establecimiento. Luego discute el error en estado permanente para diferentes tipos de entrada y cómo depende de constantes como la de posición estática Kp.
El documento describe dos técnicas de resolución de problemas usando recursión: dividir y vencer y backtracking. Divide y vencer involucra dividir un problema en subproblemas más pequeños hasta alcanzar un caso base, y luego combinar las soluciones para resolver el problema original. Backtracking implica examinar todas las posibilidades buscando una solución, retrocediendo cuando una posibilidad no funciona. El documento provee ejemplos como encontrar el elemento más pequeño en un arreglo y el problema clásico de las ocho reinas.
El documento habla sobre recursión en programación. Explica que una función recursiva es aquella que se llama a sí misma. Usa el ejemplo del cálculo de factoriales para ilustrar cómo se puede resolver un problema de manera recursiva mediante la reducción del problema a uno similar pero más pequeño hasta alcanzar un caso base. También describe cómo la pila de llamadas administra las llamadas anidadas de funciones recursivas.
La recursividad divide problemas complejos en subproblemas más pequeños del mismo tipo hasta alcanzar un caso base simple. Se ilustran ejemplos como el factorial, la serie de Fibonacci y el problema de las Torres de Hanoi. La recursividad es útil para problemas que pueden expresarse como una secuencia de pasos gobernados por reglas no ambiguas.
El documento explica la recursividad, definida como un proceso que se define en términos de sí mismo. Explica que todo proceso recursivo debe tener una definición base y recursiva. Usa como ejemplos el cálculo factorial de forma recursiva y la serie de Fibonacci.
Este documento describe la recursividad, incluyendo su definición, tipos de procedimientos recursivos y ejemplos como el factorial, Fibonacci, triángulo de Pascal. La recursividad se basa en la llamada repetida de un método dentro de su propia definición hasta alcanzar un caso base. Ofrece ventajas como menos líneas de código pero también desventajas como un mayor uso de memoria y tiempo de procesamiento.
Este documento trata sobre algoritmos recursivos. Explica que un método recursivo contiene llamadas a sí mismo y debe tener una condición de salida para evitar un bucle infinito. También cubre las condiciones que debe cumplir un algoritmo recursivo y cuando es apropiado usar recursividad frente a iteración.
Este documento presenta un reporte de investigación sobre recursividad. Explica conceptos clave como recursión directa e indirecta y características de funciones recursivas como el caso base y caso recursivo. También discute ventajas de programación recursiva como su cercanía a descripciones matemáticas. Finalmente, concluye que recursividad es fundamental en matemáticas y computación para implementar estructuras de repetición.
Este documento describe los algoritmos recursivos, incluyendo su definición como una función que se llama a sí misma, recursividad indirecta donde una subrutina llama a otra formando ciclos, y ejemplos de recursión lineal y múltiple. Explica que aunque los algoritmos recursivos son menos eficientes que los iterativos, hacen los programas más simples y comprensibles. También cubre el uso de pilas para almacenar valores recursivos y cómo diseñar algoritmos recursivos mediante la determinación de casos base y generales.
Este documento introduce el cálculo integral y las reglas básicas para calcular integrales indefinidas. Explica que una antiderivada es la función original cuya derivada es conocida, y presenta reglas para calcular antiderivadas de funciones elementales como potencias, constantes y constantes multiplicadas por funciones. También cubre la notación y definición formal de la integral indefinida.
El documento describe la técnica "divide y vencerás" para resolver problemas de forma eficiente dividiéndolos en subproblemas más pequeños. Explica los requisitos para aplicarla, el esquema recursivo general y análisis de complejidad. Luego presenta ejemplos como búsqueda de máximo/mínimo, ordenación, selección, multiplicación de enteros y matrices.
El documento presenta una introducción a los conceptos de programación dinámica y algoritmos voraces. Explica que la programación dinámica resuelve problemas de manera bottom-up almacenando soluciones óptimas de subproblemas, mientras que los algoritmos voraces toman decisiones locales óptimas que conducen a una solución global óptima. También describe algoritmos como el de Floyd para caminos más cortos, Prim y Kruskal para árboles de extensión mínima.
Este documento trata sobre la recursividad y los métodos recursivos. Explica que la recursividad implica definir un proceso en términos de sí mismo, y que un método recursivo es aquel que puede llamarse a sí mismo. Presenta ejemplos de recursividad matemática como los fractales y la función factorial. Luego describe cómo implementar métodos recursivos en programación y los dos tipos de recursividad: directa e indirecta. Finalmente, resuelve problemas como Fibonacci, potencias y suma de naturales usando recursividad.
Este documento introduce el algoritmo de ordenamiento Merge Sort y el problema de selección. Explica que Merge Sort es un algoritmo divide y vencerás que ordena un vector dividiéndolo en la mitad, ordenando cada mitad de forma recursiva y luego combinando las mitades ordenadas. Tiene un tiempo de ejecución de O(n log n) y es un algoritmo estable. También introduce el problema de selección, que busca encontrar el elemento de rango k en un vector, y propone una solución basada en cribas que es lineal en el mejor de los casos.
1. El documento describe algoritmos divide y vencerás y sus ejemplos de encontrar el elemento mayoritario y ordenar con quicksort. 2. Estos algoritmos dividen recursivamente un problema en subproblemas más pequeños hasta alcanzar casos base triviales. 3. También compara estos algoritmos con enfoques alternativos como fuerza bruta o ordenar y buscar, señalando que divide y vencerás es más eficiente.
Capítulo 7 sincronización de procesos 09 01-2012ecuatareas
Este documento presenta tres algoritmos para resolver el problema de la sección crítica entre dos hilos. El Algoritmo 1 usa una variable turno compartida que indica qué hilo puede acceder a la sección crítica. El Algoritmo 2 usa una matriz de banderas para cada hilo. El Algoritmo 3 combina la variable turno y la matriz de banderas. También describe soluciones basadas en hardware como test-and-set e intercambio y el uso de semáforos para controlar el acceso a secciones críticas.
Sección 3.6 "Transformada Z unilateral" de la unidad Transformada Z y sus aplicaciones del curso de Procesamiento Digital de Señales de la Universidad Autónoma de Nayarit
Este documento presenta la solución a un taller de control de sistemas con 5 ejercicios resueltos en Matlab y Simulink. El primer ejercicio involucra obtener transformadas de Laplace e inversas de varias funciones. El segundo ejercicio caracteriza una planta experimentalmente. El tercer ejercicio modela un circuito RLC. Los ejercicios 4 y 5 involucran modelar sistemas en Simulink y analizar su estabilidad. El documento provee detalles completos sobre cómo resolver cada punto del taller.
El documento presenta diferentes técnicas de integración como la integración por partes, sustitución trigonométrica, integración de funciones racionales mediante fracciones parciales e integrales trigonométricas. Explica cómo aplicar estas técnicas a diferentes tipos de funciones y ofrece una estrategia general para identificar la técnica apropiada al integrar una función.
Este documento describe la recursividad, incluyendo su definición, tipos (simple, múltiple, anidada, cruzada), mecánica (caso base, caso general, uso de pila), diseño y ventajas/desventajas. La recursividad implica definir un proceso en términos de sí mismo, y puede ser una alternativa a la iteración para resolver problemas recursivamente definidos.
Control de trayectoria de manipulador robótico de Juan Camarena
Este documento describe el diseño y análisis de controladores para un brazo robótico Mitsubishi de 4 grados de libertad. Se modela la dinámica del robot usando el método de Lagrange-Euler y SimMechanics. Se analizan tres tipos de controladores: PID clásico, control por torque computado optimizado con algoritmos genéticos, y controlador neuro-fuzzy. Los controladores se comparan usando el modelo ideal de Lagrange y el modelo más realista de SimMechanics. Los resultados muestran que el controlador PID tiene un desempeño insuficiente
La recursividad es un concepto fundamental en matemáticas y computación que implementa estructuras de repetición de manera diferente a los ciclos. Una función recursiva consta de un caso base y un caso recursivo donde la función se llama a sí misma con parámetros más cercanos al caso base. Un ejemplo es calcular factorial de manera recursiva donde el caso base es 0! = 1 y el caso recursivo es n! = n * (n-1)!.
Unidad 3 c5-control/ANALISIS DE LA RESPUESTA EN EL TIEMPODavinso Gonzalez
El documento analiza la respuesta transitoria de sistemas de control en tiempo discreto a una entrada escalón. Explica que la respuesta presenta oscilaciones amortiguadas antes de alcanzar el estado permanente y define parámetros como tiempo de retardo, levantamiento y establecimiento. Luego discute el error en estado permanente para diferentes tipos de entrada y cómo depende de constantes como la de posición estática Kp.
El documento describe dos técnicas de resolución de problemas usando recursión: dividir y vencer y backtracking. Divide y vencer involucra dividir un problema en subproblemas más pequeños hasta alcanzar un caso base, y luego combinar las soluciones para resolver el problema original. Backtracking implica examinar todas las posibilidades buscando una solución, retrocediendo cuando una posibilidad no funciona. El documento provee ejemplos como encontrar el elemento más pequeño en un arreglo y el problema clásico de las ocho reinas.
El documento habla sobre recursión en programación. Explica que una función recursiva es aquella que se llama a sí misma. Usa el ejemplo del cálculo de factoriales para ilustrar cómo se puede resolver un problema de manera recursiva mediante la reducción del problema a uno similar pero más pequeño hasta alcanzar un caso base. También describe cómo la pila de llamadas administra las llamadas anidadas de funciones recursivas.
Este documento trata sobre recursión. Explica qué es un algoritmo recursivo y cómo funciona la recursión mediante el ejemplo de la sucesión de Fibonacci. Detalla cómo programar un método recursivo, incluyendo la necesidad de tener un caso base y avanzar hacia este caso base en cada llamada recursiva. También cubre cómo depurar un método recursivo usando la pila de llamadas. Si bien la recursión puede ser elegante, no siempre es la opción más eficiente debido al uso de recursos, por lo que en algunos casos es mejor usar una solución iterativa.
Este documento describe diferentes métodos de búsqueda de datos, incluyendo búsqueda interna en estructuras de datos como arreglos y listas enlazadas, y búsqueda externa en archivos. Explica los métodos de búsqueda secuencial, binaria y hash, y cómo la búsqueda binaria divide repetidamente los elementos a la mitad para encontrar el dato buscado de manera más eficiente que la búsqueda secuencial.
El documento introduce el concepto de recursividad en programación. Explica que la recursividad consiste en que una función se llame a sí misma, ya sea directamente o indirectamente a través de otra función. Detalla que una función recursiva tiene un caso base y un caso recursivo, donde el caso recursivo resuelve el problema llamando de nuevo a la función con un problema de tamaño menor hasta alcanzar el caso base. El documento provee ejemplos como el cálculo factorial y la serie de Fibonacci para ilustrar el uso de la recursividad.
La unidad describe varias estructuras de datos fundamentales como la recursividad, pilas, colas, listas enlazadas y árboles. Explica conceptos como LIFO y FIFO. Detalla las operaciones básicas de cada estructura como push, pop, insertar y extraer elementos. También cubre temas como el balanceo de árboles binarios y diferentes tipos de recorridos de árboles como preorden, inorden y postorden.
El documento habla sobre las estructuras en el lenguaje de programación C. Explica que una estructura permite almacenar múltiples variables de diferentes tipos, lo que es útil para representar objetos complejos como registros de clientes. También describe cómo declarar y acceder a estructuras, incluyendo el uso de arreglos de estructuras. Finalmente, propone un ejercicio para aplicar estas nociones mediante un programa de registro de proveedores, clientes, empleados y productos de una empresa.
La recursividad implica definir una función en términos de sí misma llamándose a sí misma. Una función recursiva tiene un caso base y un caso recursivo. El caso base detiene la recursión y el caso recursivo resuelve el problema dividiéndolo en subproblemas más pequeños.
El documento habla sobre la recursividad. Explica que la recursividad es un concepto fundamental en matemáticas y computación que implica que una función se llame a sí misma. Se usa cuando la solución puede expresarse como una secuencia de pasos gobernados por reglas. Incluye ejemplos como el factorial y la serie de Fibonacci, mostrando cómo se definen recursivamente y cómo se resuelven recursivamente llamando a la función con parámetros más pequeños hasta alcanzar un caso base.
El documento trata sobre la recursividad y cómo aplicarla en C# para calcular factoriales. Explica que la recursividad permite que un bloque de instrucciones se ejecute varias veces reemplazando estructuras repetitivas. Define la recursividad como un caso base y casos recursivos donde un procedimiento se llama a sí mismo resolviendo problemas de tamaño menor hasta alcanzar el caso base. Muestra un ejemplo recursivo en C# para calcular factoriales aplicando la definición n! = n * (n-1)! hasta que n = 1.
Este documento introduce conceptos básicos de algoritmos como divisibilidad, números primos, factorización, máximo común divisor, mínimo común múltiplo y conversión de bases. Incluye ejemplos y ejercicios para implementar algoritmos relacionados con estos temas como determinar si un número es primo, encontrar todos los primos menores a un número, y convertir números entre diferentes bases numéricas.
El documento define la recursividad como un proceso que está definido total o parcialmente en términos de sí mismo. Explica que todo proceso recursivo debe tener al menos una definición base y una definición recursiva. Usa el ejemplo del cálculo factorial para ilustrar un proceso recursivo.
Este documento describe la recursión y la iteración, los números de Catalán, y algoritmos para calcular los números de Catalán de forma recursiva e iterativa. Explica que los números de Catalán aparecen en problemas de combinatoria y tienen aplicaciones como determinar el número de formas de descomponer un polígono en triángulos. También incluye ejemplos de código para implementar los algoritmos recursivo e iterativo.
Este documento describe recursión e iteración, los números de Catalán, y algoritmos para calcular los números de Catalán de forma recursiva e iterativa. Explica que la recursión permite expresar soluciones simples a ciertos problemas y provee ejemplos de código para calcular los números de Catalán recursiva y iterativamente. Finalmente, recomienda usar recursión cuando un problema es más fácil de resolver de esa forma.
Este documento describe recursión e iteración, los números de Catalán, y algoritmos para calcular los números de Catalán de forma recursiva e iterativa. Explica que la recursión permite expresar soluciones simples a ciertos problemas y provee ejemplos de código para calcular los números de Catalán recursiva y iterativamente. Finalmente, recomienda usar recursión cuando un problema es más fácil de resolver de esa forma.
Este documento describe la recursión y la iteración, y proporciona ejemplos de algoritmos recursivos y iterativos para calcular los números de Catalan. Explica que la recursión permite expresar soluciones simples a ciertos problemas y que los números de Catalan tienen aplicaciones en combinatoria. También incluye código de ejemplo para calcular los números de Catalan de forma recursiva e iterativa.
Este documento presenta una introducción a los números, incluyendo su clasificación, propiedades y operaciones. Se divide los números en enteros, racionales, irracionales y reales. Explica cómo convertir números decimales periódicos a fracciones y representar números reales en una recta numérica. También describe las propiedades de las operaciones de suma, multiplicación, y define qué es una operación binaria.
Este documento presenta una introducción a los números, incluyendo su clasificación, propiedades y operaciones. Se clasifican los números en enteros, racionales, irracionales y reales. Los números reales incluyen racionales e irracionales y pueden representarse en una recta numérica. Las operaciones como la suma y multiplicación siguen propiedades como conmutatividad y asociatividad. Finalmente, se define una operación binaria y se analizan algunos ejemplos.
El documento describe conceptos de recursividad y estructuras de datos, incluyendo funciones recursivas, tipos de datos abstractos, estructuras anidadas y recursivas. Explica el funcionamiento de la recursividad a través de ejemplos como la suma de números naturales y el factorial de un número. También compara recursividad e iteración y da ejemplos de aplicaciones como el problema de las Torres de Hanoi.
Metodologia de la programacion recursividadvictdiazm
Este documento introduce el concepto de recursividad en programación. Explica que la recursividad permite definir una función en términos de sí misma para resolver un problema. Describe cómo diseñar algoritmos recursivos mediante la identificación de casos base y casos generales, y cómo ejecutarlos mediante trazas recursivas. Proporciona varios ejemplos de funciones recursivas como el cálculo factorial, la suma de elementos de un vector y la búsqueda binaria.
El documento describe conceptos clave sobre recursividad y eficiencia de algoritmos. Explica que la recursividad implica que un método se llame a sí mismo, y debe contener un caso base y uno recursivo. También cubre temas como bucles, notación asintótica, y ejemplos como factoriales y búsqueda binaria que ilustran el enfoque "dividir para vencer".
Este documento trata sobre la recursión en algoritmos y programación. Define la recursión como funciones que se llaman a sí mismas, ya sea directa o indirectamente. Da ejemplos de recursión como la función factorial y clasifica los tipos de recursión. Explica conceptos como la optimización de cola, recursión anidada, múltiple y el patrón "divide y vencerás", ilustrando con ejemplos de potencias y ordenamientos recursivos como mergesort y quicksort. Finaliza dando referencias bibliográficas.
Este documento trata sobre recursividad. Explica conceptos como caso base, paso recursivo y tipos de recursividad como recursividad simple, múltiple y anidada. También presenta estrategias para resolver problemas recursivos como dividir y vencer y backtracking. Finalmente incluye ejemplos de algoritmos recursivos como el factorial y la conversión de un número a binario.
Este documento presenta un resumen de los métodos para calcular máximos y mínimos de una función, incluyendo el criterio de la primera derivada y el criterio de la segunda derivada. Luego, resuelve un problema de virulencia bacteriana que implica encontrar los instantes de máxima y mínima virulencia, así como los intervalos de crecimiento y decrecimiento. Finalmente, grafica la función dada.
1) El documento explica el concepto de recursividad y cómo se puede implementar en C#. 2) Da como ejemplo el cálculo factorial de un número y el máximo común divisor de dos números usando algoritmos recursivos. 3) Explica el problema de las Torres de Hanoi como un ejemplo clásico de recursividad y cómo implementarlo en C#.
Este documento presenta un resumen de 3 oraciones sobre recursividad. Explica que la recursividad implica que una función se define en términos de sí misma y puede resolverse mediante casos base y recursivos. Describe los componentes de una pila de recursión y cómo almacena los valores y el control de llamadas anidadas a una función. Finalmente, señala que la recursividad es útil para problemas que pueden expresarse como una secuencia de pasos gobernados por reglas no ambiguas.
La recursividad es un concepto fundamental en matemáticas y computación que implica definir una función en términos de sí misma. Las funciones recursivas constan de un caso base y uno recursivo, donde este último involucra volver a llamar a la función con parámetros más simples hasta alcanzar el caso base.
Similar a Programación Orientada a Objetos parte 3 (20)
Este documento presenta información general sobre un curso de Infraestructura de Tecnologías de la Información. El curso se centra en el marco de referencia ITIL y enseña a los estudiantes a utilizarlo para desarrollar procesos y prácticas que optimicen los servicios de TI en las empresas. El curso consta de cinco unidades y siete actividades evaluativas. Los estudiantes aprenderán sobre temas como servicios de TI, ciclo de vida de servicios, procesos y roles dentro de las organizaciones y el uso de tecnologías
Este documento presenta la información general sobre el curso "Sistemas de Información Empresarial". El curso consta de 7 unidades que cubren temas como introducción a los sistemas de información, negocios electrónicos, infraestructura tecnológica, comercio electrónico y estrategia digital. El objetivo es desarrollar la competencia de implementar sistemas de información que ayuden a las empresas a mejorar sus procesos y toma de decisiones. El curso se impartirá de forma escolarizada con apoyo de plataformas en línea
Este documento describe la realidad virtual y su objetivo de crear mundos virtuales que puedan ser indistinguibles de la realidad física. La realidad virtual permite crear objetos y definir sus interacciones en entornos que no existen en la realidad pero que pueden ser experimentados a través de una computadora. El documento también indica que el curso consta de 4 unidades y 8 actividades sobre el tema de la realidad virtual.
Este documento presenta la información general sobre el curso de Ingeniería y Tecnología Web I. El curso consta de 5 unidades que cubren temas como HTML, CSS, programación del lado del servidor y cliente, y comunicación entre sistemas de información web. El curso busca desarrollar la competencia de gestionar sistemas de información siguiendo estándares internacionales. Se evaluará a los estudiantes a través de 10 actividades y un proyecto final.
Este documento presenta la información general sobre el curso de Lenguajes de Programación I. El curso consta de 5 unidades que cubren temas como programación orientada a objetos, estructuras de control, interfaces gráficas y bases de datos. El objetivo es capacitar a los estudiantes para que apliquen los conceptos de programación orientada a objetos mediante la construcción de programas con lenguajes de programación. El curso se evaluará a través de 8 actividades distribuidas en las 5 unidades con un enfoque práctico y basado en proyectos de la ind
El documento presenta un curso sobre criptografía para estudiantes de ingeniería de sistemas de información industrial. El curso consta de 4 unidades que cubren conceptos básicos, criptografía simétrica, criptografía asimétrica y aplicaciones de la criptografía. El objetivo es que los estudiantes aprendan a implementar estándares de seguridad de la información mediante técnicas criptográficas para asegurar los datos en la industria.
Este documento presenta la Actividad 4.1 sobre la evolución del proyecto. El objetivo es construir una evaluación del proyecto al finalizar utilizando las herramientas presentadas como métricas, KPIs, OKRs y SLA para medir el rendimiento y logros obtenidos. Se debe entregar la evaluación con sus resultados antes de la semana 4.
Este documento presenta la información general sobre un curso de Ingeniería de Software Segura e Ingeniería Social. El curso se compone de 5 unidades que cubren temas como conceptos básicos de ingeniería social, principios de ingeniería social, métodos de ataque comunes, especificación de confiabilidad y seguridad, y casos reales de ataques. El curso se impartirá de forma escolarizada con apoyo de plataformas en línea y actividades evaluables. El objetivo es que los estudiantes conozcan y comprendan las actividades de ingen
Este documento presenta la información general sobre el curso "Aplicaciones Móviles I". El curso consta de 4 unidades que cubren temas como programación móvil, frameworks, conexión a bases de datos y consumo de datos de Internet. El objetivo es desarrollar la competencia de gestionar sistemas de información industriales siguiendo estándares internacionales. El curso incluye actividades evaluables y se imparte de forma escolarizada con apoyo en línea.
Este documento presenta la asignatura "Fundamentos Tecnológicos II" sobre ciudades inteligentes. La asignatura se enfoca en desarrollar la competencia de diseñar estrategias y mecanismos para mejorar la calidad de vida y el crecimiento económico mediante el uso de la tecnología. El curso cubre temas como conceptos básicos de ciudades inteligentes, tecnologías emergentes y gestión inteligente. Se evalúa a los estudiantes a través de varias actividades como mapas conceptuales, investigaciones
Este documento presenta la introducción a un curso sobre estructuras de gestión y control de los servicios de TI. Se describe brevemente el contenido del curso, incluyendo las cuatro unidades temáticas, la competencia a desarrollar, las dinámicas y políticas de evaluación, y el cronograma de actividades. También incluye información sobre los contenidos temáticos que cubrirá el curso, su ubicación curricular y las fuentes de información bibliográficas.
Este documento presenta la información general sobre un curso de Ingeniería de Software Segura e Ingeniería Social. El curso consta de 5 unidades que cubren temas como conceptos básicos de ingeniería social, principios de ingeniería social, métodos de ataque comunes, especificación de confiabilidad y seguridad, y casos reales de ataques. El objetivo es desarrollar la competencia de comprender las actividades de ingeniería social y conocer técnicas de ingeniería de software para el desarrollo de sistemas confiables y seguro
El documento presenta un curso sobre criptografía para estudiantes de ingeniería de sistemas de información industrial. El curso consta de 4 unidades que cubren conceptos básicos, criptografía simétrica y asimétrica, y aplicaciones de la criptografía. El objetivo es que los estudiantes aprendan a implementar estándares de seguridad de la información mediante técnicas criptográficas para asegurar los datos en la industria. El curso incluye actividades prácticas y teóricas evaluadas a lo larg
Este documento presenta un taller sobre programación en Android. Explica que Android se está convirtiendo en una alternativa importante a otras plataformas móviles debido a su arquitectura abierta y optimizada para dispositivos móviles. Describe los componentes clave de Android como la máquina virtual Dalvik, las librerías nativas y el entorno de aplicaciones basado en Java. También presenta ejemplos de aplicaciones simples que se desarrollarán durante el taller.
Programación Orientada a Objetos parte 2Karla Silva
El documento explica los conceptos fundamentales de la programación orientada a objetos, incluyendo objetos, clases, instancias, atributos, mensajes, métodos, encapsulamiento, herencia, polimorfismo y abstracción. Define cada concepto y proporciona ejemplos para ilustrarlos.
Programación Orientada a Objetos parte 1Karla Silva
La programación orientada a objetos surgió como una forma nueva de pensar para dominar la complejidad del software. Representa problemas como escenarios compuestos por objetos con atributos y comportamientos, en lugar de descomponerlos en acciones. Esto permite modelar problemas basados en entidades del mundo real y su interacción mediante mensajes, en lugar de enfocarse sólo en las acciones.
Programación Orientada a Objetos Parte 1Karla Silva
La programación orientada a objetos surgió como una forma nueva de pensar para dominar la complejidad del software. Representa problemas como escenarios compuestos por objetos con atributos y métodos, en lugar de descomponerlos en acciones. Esto permite modelar problemas basados en entidades del mundo real y cómo interactúan mediante el intercambio de mensajes.
2. Ejemplo Matrushka
• La Matrushka es una artesanía tradicional rusa.
Es una muñeca de madera que contiene otra
muñeca más pequeña dentro de sí. Esta
muñeca, también contiene otra muñeca dentro.
Y así, una dentro de otra.
2Mtra. Karla Silva R
3. ¿Qué es la recursividad?
• La recursividad es un concepto fundamental en
matemáticas y en computación.
• Es una alternativa diferente para implementar
estructuras de repetición (ciclos). Los módulos
se hacen llamadas recursivas.
• Se puede usar en toda situación en la cual la
solución pueda ser expresada como una
secuencia de movimientos, pasos o
transformaciones gobernadas por un conjunto de
reglas no ambiguas.
3Mtra. Karla Silva R
4. • Es una técnica de programación que nos permite que un
bloque de instrucciones se ejecute n veces. Remplaza
en ocasiones a estructuras repetitivas.
• Este concepto será de gran utilidad para el capítulo de la
estructura de datos tipo árbol.
• La recursividad es un concepto difícil de entender en
principio, pero luego de analizar diferentes problemas
aparecen puntos comunes.
4Mtra. Karla Silva R
5. Función recursiva
Las funciones recursivas se componen de:
– Caso base: una solución simple para un caso
particular (puede haber más de un caso
base). La secuenciación, iteración
condicional y selección son estructuras
válidas de control que pueden ser
consideradas como enunciados.
NOTA: Regla recursiva Las estructuras de control que se pueden
formar combinando de manera válida la secuenciación,
iteración condicional y selección también son válidos.
5Mtra. Karla Silva R
6. Función recursiva
– Caso recursivo: una solución que involucra
volver a utilizar la función original, con
parámetros que se acercan más al caso
base. Los pasos que sigue el caso
recursivo son los siguientes:
1. El procedimiento se llama a sí mismo
2. El problema se resuelve, resolviendo el
mismo problema pero de tamaño menor
3. La manera en la cual el tamaño del
problema disminuye asegura que el caso
base eventualmente se alcanzará
6Mtra. Karla Silva R
8. Ejemplo: factorial
Escribe un programa que calcule el factorial (!)
de un entero no negativo. He aquí algunos
ejemplos de factoriales:
– 0! = 1
– 1! = 1
– 2! = 2 2! = 2 * 1!
– 3! = 6 3! = 3 * 2!
– 4! = 24 4! = 4 * 3!
– 5! = 120 5! = 5 * 4!
8Mtra. Karla Silva R
9. Ejemplo: factorial (iterativo)
public int factorial (int n) {
int fact = 1;
for (int i = 1; i <= n; i++)
fact *= i;
return fact;
}
9
int factorial (int n)
comienza
fact 1
para i 1 hasta n
fact i * fact
regresa fact
termina
Mtra. Karla Silva R
10. Ejemplo: factorial (recursivo)
int factorial (int n)
comienza
si n = 0 entonces
regresa 1
otro
regresa factorial (n-1)*n
termina
public int factorial (int n) {
if n == 0 return 1;
else
return factorial (n-1) * n;
}
10Mtra. Karla Silva R
13. Aquí podemos ver la secuencia que toma el factorial
1 si N = 0 (base)
N ! =
N * (N – 1) ! si N > 0 (recursión)
Un razonamiento recursivo tiene dos partes: la base y la
regla recursiva de construcción. La base no es recursiva y
es el punto tanto de partida como de terminación de la
definición.
13
Solución
Mtra. Karla Silva R
14. Solución Recursiva
Dado un entero no negativo x, regresar el factorial de x fact:
Entrada n entero no nogativo,
Salida:entero.
int fact (int n)
{
if (n == 0)
return 1;
else
return fact(n – 1) * n ;
}
14
Es importante determinar
un caso base, es decir un
punto en el cual existe una
condición por la cual no se
requiera volver a llamar a
la misma función.
Mtra. Karla Silva R
15. ¿Cómo funciona la recursividad?
15
Llamadas recursivas
Resultados de las llamadas recursivas
Mtra. Karla Silva R
16. ¿Por qué escribir programas recursivos?
• Son mas cercanos a la descripción
matemática.
• Generalmente mas fáciles de analizar
• Se adaptan mejor a las estructuras de
datos recursivas.
• Los algoritmos recursivos ofrecen
soluciones estructuradas, modulares y
elegantemente simples.
16Mtra. Karla Silva R
17. ¿Cómo escribir una función en forma
recursiva?
<tipo_de_regreso><nom_fnc> (<param>){
[declaración de variables]
[condición de salida]
[instrucciones]
[llamada a <nom_fnc> (<param>)]
return <resultado>
}
17Mtra. Karla Silva R
18. Ejercicio
Considere la siguiente ecuación recurrente:
an = an-1 + 2n
a0 = 1
Escribe el algoritmo de la solución.
18Mtra. Karla Silva R
19. ¿Cuándo usar recursividad?
• Para simplificar el código.
• Cuando la estructura de datos es recursiva
ejemplo : árboles.
• Cuando los métodos usen arreglos largos.
• Cuando el método cambia de manera
impredecible de campos.
• Cuando las iteraciones sean la mejor opción.
19
¿Cuándo no usar recursividad?
Mtra. Karla Silva R
20. Algunas Definiciones.
• Cuando un procedimiento incluye una
llamada a sí mismo se conoce como
recursión directa.
20Mtra. Karla Silva R
21. Algunas Definiciones.
• Cuando un procedimiento llama a otro
procedimiento y éste causa que el
procedimiento original sea invocado, se conoce
como recursión indirecta.
NOTA: Cuando un procedimiento recursivo se llama recursivamente a
si mismo varias veces, para cada llamada se crean copias
independientes de las variables declaradas en el procedimiento.
21Mtra. Karla Silva R
22. Recursión vs. iteración
Repetición
Iteración: ciclo explícito
Recursión: repetidas invocaciones a método
Terminación
Iteración: el ciclo termina o la condición del ciclo
falla
Recursión: se reconoce el caso base
En ambos casos podemos tener ciclos infinitos
Considerar que resulta más positivo para cada problema
la elección entre eficiencia (iteración) o una buena
ingeniería de software, La recursión resulta normalmente
más natural.
22Mtra. Karla Silva R
23. Otros Ejemplos de recursividad:
• Inversión de una cadena
estática Cad invierte (Cad cadena, int limIzq, int
limDer)
si limDer = limIzq entonces regresa cadena
sino regresa invierte (cadena, limDer,
limIzq+1) + cadena [limIzq]
fin
23Mtra. Karla Silva R
24. Otros Ejemplo de recursividad:
Palíndromos
Un palíndromo es una cadena que se lee (se
escribe, en este caso) igual de izquierda a
derecha que de derecha a izquierda. Escribir una
función que determine cuando una cadena es o no
un palíndromo.
24Mtra. Karla Silva R
25. Solución
estática bool palindrome (Cad c, int limIzq, int limDer)
si limIzq > limDer entonces
regresa verdadero
sino
si c [limIzq] = c [limDer] entonces
regresa palindrome (c, limIzq+1, limDer-1)
sino regresa falso
fin
25Mtra. Karla Silva R
26. Ejemplo: Serie de Fibonacci
Valores: 0, 1, 1, 2, 3, 5, 8...
Cada término de la serie suma los 2 anteriores. Fórmula recursiva
fib(n) = fib (n - 1) + fib (n - 2)
Caso base: Fib (0)=0; Fib (1)=1
Caso recursivo: Fib (i) = Fib (i -1) + Fib(i -2)
public static int fib(int n){
if (n <= 1) return n; //condición base
else
return fib(n-1)+fib(n-2); //condición recursiva
} 26Mtra. Karla Silva R
27. Ejemplo: Serie de Fibonacci
Traza del cálculo recursivo
27
Fib(1)return
Fib(3)
Fib(2) +
return 1Fib(0)return Fib(1) +
return 1 return 0
Mtra. Karla Silva R
28. Trampas sutiles: Código ineficiente.
28
public int fib (int n)
{
if (n < 2)
return 1;
else
return fib (n-2) +
fib ( n-1);
}
public int fib (int n)
{
int f1 = 1, f2 = 1, nuevo;
while (n > 2)
{
nuevo = f1 + f2;
f1 = f2; f2 = nuevo;
n--;
}
return f2;
}fib (100) toma 50 años
en dar el resultado
fib (100) toma tan sólo
unos microsegundos en
dar el resultado
Mtra. Karla Silva R
29. Serie fibonacci Iteración vs recursión
-10
0
10
20
30
40
50
60
70
0 10 20 30 40 50 60
iteraciones
recursividad
29Mtra. Karla Silva R
30. Un ejemplo clásico de recursividad:
Torres de Hanoi
30
A B C
Mtra. Karla Silva R
31. Torres de Hanoi
• Tenemos tres astas A, B y C, y un conjunto
de cinco aros, todos de distintos tamaños.
• El enigma comienza con todos los aros
colocados en el asta A de tal forma que
ninguno de ellos debe estar sobre uno más
pequeño a él; es decir, están apilados, uno
sobre el otro, con el más grande hasta abajo,
encima de él, el siguiente en tamaño y así
sucesivamente.
31Mtra. Karla Silva R
32. Torres de Hanoi
• El propósito del enigma es lograr apilar los cincos
aros, en el mismo orden, pero en el hasta C.
• Una restricción es que durante el proceso,
puedes colocar los aros en cualquier asta, pero
debe apegarse a las siguientes reglas:
– Solo puede mover el aro superior de cualquiera de las
astas.
– Un aro más grande nunca puede estar encima de uno
más pequeño.
32Mtra. Karla Silva R
33. ¿Cómo resolvemos el problema?
• Para encontrar cómo se resolvería este
problema, debemos ir viendo cómo se
resolvería cada caso.
33http://personal4.iddeo.es/estaran/artiludi/pinacote/magritte/magritte.htmlMtra. Karla Silva R
34. ¿Cómo se resolvería el caso en
que hubiera un aro?
34
Pasando directamente el aro de A a C.
A B C
Mtra. Karla Silva R
35. ¿Cómo se resolvería el caso en
que hubiera 2 aros?
35
Colocando el más pequeño en el asta B, pasando el
grande a el asta C y después moviendo el que está
en B a C.
A B C
Mtra. Karla Silva R
37. Resolviendo el problema de las Torres
de Hanoi
• Entonces, por lo que hemos podido ver, el programa
podría definirse de la siguiente manera:
– Si es un solo disco, lo movemos de A a C.
– En otro caso, suponiendo que n es la cantidad de
aros que hay que mover
• Movemos los n-1 aros superiores - es decir, sin
contar el más grande- de A a B (utilizando a C
como auxiliar).
• Movemos el último aro (el más grande) de A a
C.
• Movemos los aros que quedaron en B a C
(utilizando a A como auxiliar). 37Mtra. Karla Silva R
38. “Dividir para vencer”
• Muchas veces es posible dividir un problema en
subproblemas más pequeños, generalmente del
mismo tamaño, resolver los subproblemas y
entonces combinar sus soluciones para obtener la
solución del problema original.
• Dividir para vencer es una técnica natural para las
estructuras de datos, ya que por definición están
compuestas por piezas. Cuando una estructura de
tamaño finito se divide, las últimas piezas ya no
podrán ser divididas.
38Mtra. Karla Silva R
39. Ejemplo:
Encontrar el número mayor de un arreglo de enteros:
estática int mayor1 (objeto [ ] A, int limIzq, int limDer)
si limIzq = limDer entonces ;
regresa A[limIzq]
sino
m = (limIzq + limDer) / 2
mayorIzq = mayor1 (A, limIzq, m)
mayorDer = mayor1 (A, m +1, limDer)
si mayorIzq > mayorDer entonces
regresa mayorIzq
sino regresa mayorDer
finsi
finsi
39Mtra. Karla Silva R
40. Búsqueda Binaria (buscar un valor en un arreglo)
estática bool busbin (int[ ] A, int limIzq, int
limDer, objeto valor)
si limIzq = limDer entonces
regresa A[limDer]== (valor)
Sino
m (limIzq + limDer) / 2
si A[m]==(valor)entonces regresa verdadero
sino
si valor > (A[m]) entonces
regresa BusBin (A,m+1,limDer, valor)
sino regresa BusBin (A,limIzq,m-1, valor)
fin
fin
40Mtra. Karla Silva R
41. Tarea
• Función de Ackerman
ACK(0, n) = n+1; n>= 0
ACK(m, 0) = ACK(m-1, 1); m>0
ACK(m, n) = ACK(m-1, ACK(m, n-1)); m>0, n>0
41Mtra. Karla Silva R