===== Lecture 2: Recursive functions ====== "Hello world" // in Scala (FP in general) // fiecare bucata de cod este // O EXPRESIE si ea se evalueaza // la ceva TOT TIMPUL. var x = 0 if (x > 0) 1 else 0 // efecte laterale (side effects) // calculam suma tuturor numerelor de la 0 la 10 var sum = 0 for (i <- 0 to 10) sum += i sum // functie recursiva def sumTo(start: Int, stop: Int): Int = if (start > stop) 0 else start + sumTo(start+1,stop) sumTo(0,10) def tail_sumTo(start: Int, stop: Int): Int = { def loop (i: Int, sum: Int): Int = if (i > stop) sum else loop(i+1, sum+ i) loop(start,0) } //factorial var fact = 1 for (i <- 1 to 5) fact *= i fact def fact(n: Int): Int = if (n == 1) 1 else n*fact(n-1) def tail_fact(n: Int): Int = { def loop(i: Int, crt_fact: Int): Int = if (i > n) crt_fact else loop(i+1,i*crt_fact) loop(1,1) } tail_fact(10) // nrele lui Fibonacci // f0 = 0, f1 = 1 // fn = f{n-1} + f{n-2} var bf_last = 0 var last = 1 var n = 5 for (i <- 0 to n-2){ var aux = last + bf_last bf_last = last last = aux } last def fibo(n: Int): Int = if (n == 0) 0 else if (n == 1) 1 else fibo(n-1)+fibo(n-2) def tail_fibo(n: Int): Int = { def loop(i: Int, before_last: Int, last: Int): Int = { if (i > n-2) last else loop(i+1,last,before_last+last) } loop(0,0,1) } tail_fibo(500)