Saltar a contenido

Enfoque en Java (Imperativo)

import java.util.LinkedList;
public class Cosita {

  public long factorial(int n){
    if (n==0){
      return 1L;
    }
    else{
      return n*factorial(n-1);
    }
  }

  public LinkedList<Long> listaFactoriales(int n){
    LinkedList<Long> lst = new LinkedList<Long>();

    for(int i=0; i<=n; i++){
        lst.add(factorial(i));
    }
    return lst;
  }

  public static void main(String[] args) {
    Cosita objCosita = new Cosita();
    System.out.println(objCosita.factorial(4));
    System.out.println(objCosita.factorial(20));
    System.out.println(objCosita.listaFactoriales(20));
  }
}

Elementos

  1. Asignación lst.add (modifica la lista)
  2. Estructura iterativa for(int .....)
  3. Retornos return (break, continue)

Enfoque en PF

/*
 * This Scala source file was generated by the Gradle 'init' task.
 */
package taller

object App {
  def factorial(n: Int): Long = {
    if (n == 0) 1L
    else n*factorial(n-1)
  }

  def generador(i: Int, f:Int):List[Int] = {
    if (i == f) List(i)
    else i :: generador(i+1,f)
  }

  def listaFactoriales(n:Int):List[Long] ={
    generador(0,n).map(factorial)
  }



  def main(args: Array[String]): Unit = {
    println(factorial(4))
    println(factorial(20))
    println(generador(0, 10))
    println(listaFactoriales(20))
  }

}
  1. Valores inmutables (no uso de asignación)
  2. Las funciones son valores que pueden ser creados (def), compuestos cuando listaFactoriales llama generador o invocados listafactoriales(20)
  3. Funciones como ciudadanos de primera clase (valores) una función puede ser enviada como parametro map(factorial)
  4. Toda expresión debe ser un valor por esta razón no tenemos return, break o continue