Como vamos¶
Segundo corte
- Tipos de recursion
- Lineal: Abre marcos pila por cada llamado
- Cola: Que se puede optimizar, recomendacion la anotación @tailrec esta optimizada en memoria
- Arbol: Mas de un llamado recursivo y es dificil de volver de cola (si hay una versión iterativa del algoritmo se puede hacer de cola)
- Recursión estructural (programación) sobre la estructura listas
- Caso base Lista vacia
- Caso recursivo: operacion head (suma, cons, etc) y el llamado recursivo con tail
def sumaList(l:List[Int]):Int = { @scala.annotation.tailrec def sumaListAux(l:List[Int], acc:Int = 0):Int = { if (l.isEmpty) acc else sumaListAux(l.tail, l.head + acc) } }
- Inducción matematica: demostrar teoremas
- Paso base P(1), el primer elemento del conjunto de validos
- Paso inductivo a partir de P(k) demostrar P(k+1) el siguiente elemento, aveces podemos tambien aplicarlo para P(k-1)
Temas¶
- Inducción estructural: Estructuras de datos
- Inducción generalizada: Cuando tenemos teoremas de más de un variable (introducción)