2. Se llama recursividad a un proceso mediante el
que una función se llama a sí misma de forma
repetida, hasta que se satisface alguna
determinada condición.
El proceso se utiliza para computaciones
repetidas en las que cada acción se determina
mediante un resultado anterior. Se pueden
escribir de esta forma muchos problemas
iterativos.
3. Se deben satisfacer dos condiciones para que se
pueda resolver un problema recursivamente:
Primera: El problema se debe escribir en forma
recursiva.
Segunda: La sentencia del problema debe
incluir una condición de fin.
4. Ventajas:
• Puede resolver problemas complejos.
• Solución más natural.
Desventajas:
• Se puede llegar a un ciclo infinito.
• Versión no recursiva más difícil de desarrollar.
• Para la gente sin experiencia es difícil de programar.
5. Directa o simple: un subprograma se llama a si mismo
una o más veces directamente.
6. Indirecta o mutua: un subprograma A llama a otro
subprograma B y éste a su vez llama al subprograma
A.
7. Es una serie finita de pasos para resolver un problema.
Hay que hacer énfasis en dos aspectos para que un
algoritmo exista:
1. El número de pasos debe ser finito. De esta manera el
algoritmo debe terminar en un tiempo finito con la
solución del problema,
2. El algoritmo debe ser capaz de determinar la solución
del problema.
8. 1. Entrada: definir lo que necesita el algoritmo
2. Salida: definir lo que produce.
3. No ambiguo: explícito, siempre sabe qué comando
ejecutar.
4. Finito: El algoritmo termina en un número finito de
pasos.
5. Correcto: Hace lo que se supone que debe hacer. La
solución es correcta.
6. Efectividad: Cada instrucción se completa en tiempo
finito. Cada instrucción debe ser lo suficientemente
básica como para que en principio pueda ser ejecutada
por cualquier persona usando papel y lápiz.
9. El análisis de algoritmos nos permite medir la
dificultad inherente de un problema y evaluar la
eficiencia de un algoritmo.
Una medida que suele ser útil conocer es el tiempo de
ejecución de un algoritmo en función de N, lo que
denominaremos T(N). Esta función se puede medir
físicamente (ejecutando el programa, reloj en mano),
o calcularse sobre el código contando instrucciones a
ejecutar y multiplicando por el tiempo requerido por
cada instrucción.
10. Para medir el tiempo de ejecución de un algoritmo existen
varios métodos.
a) Benchmarking
La técnica de benchmark considera una colección de entradas
típicas representativas de una carga de trabajo para un
programa.
b) Profiling
Consiste en asociar a cada instrucción de un programa un
número que representa la fracción del tiempo total tomada
para ejecutar esa instrucción particular.
11. c) Análisis
Consiste en agrupar las entradas de acuerdo a su
tamaño, y estimar el tiempo de ejecución del
programa en entradas de ese tamaño, T(n).