Saltar a contenido

Sesión 03: Funciones y procesos

Cual es la diferencia entre función y proceso

  • Función es la codificación
  • Procesos es cómo se ejecuta

Funciones recursivas

  • Funciones que se llaman a sí mismas
  • Poseen caso uno (o más) caso base
  • Poseen uno o más casos recursivos (llamado a sí misma) paulatinamente la entrada debe llevarnos al caso BASE

Procesos y funciones recursivas

  • Se espera que una función recursiva tenga un proceso recursivo, PERO NO SIEMPRE ES ASI
  • Normalmente se deben guardar los llamados en la pila


Recursión de árbol

  • Involucra dos o más llamados
  • Está pensada para trabajar con estructuras de datos tipo árbol
  • Es díficil de optimizar
def f(n:Int):Int = {
    if (n==0) 0
    else {
        if (n==1) 1
        else f(n-1) + f(n-2)
    }
}

Resumen

  • Función es un segmento de código que realiza una tarea, en el caso de las funciones recursivas, se llaman a si mismas y deben tener al menos un caso base
  • Proceso es cómo se ejecuta una función, una función recursiva usualmente necesita varios procesos que se apilan en la pila del programa, pero NO SIEMPRE ES ASI
  • Optimización de recursión de cola, se conserva siempre un llamado, se utilizan uno más parametros de entrada par ACUMULAR la respuesta
  • Usamos @tailrec en Scala para indicar que vamos optimizar por recursión de COLA
  • NO todos los lenguajes de programación tiene optimización de recursión de cola
  • https://en.wikipedia.org/wiki/Tail_call
  • Recursión de arbol es dificil o imposible de optimizar, se utilizan es otras técnicas: volverlo imperativo o usar programación dinámica