===== Curs 02. Functii de ordin superior ===== import scala.annotation.tailrec val x = 0 "Matei" val b = if (x > 0) 1 else 0 var y = 0 def f(x: Int): Int = { var y = x y = y + 1 y } // definitia unei functii // care se numeste f // si are un parametru de tip int, care se numeste x // f intoarce un Int // expresia la care se evalueaza f este x + 1 f(1) def myAddition(x: Int, y: Int): Int = x + y myAddition(2,3) def inRange(start: Int, stop: Int, x: Int):Boolean = x >= start && x <= stop def fib(n: Int): Int = if (n == 0) 0 else if (n == 1) 1 else fib(n-1) + fib(n-2) def fib_better(n: Int): Int = { @tailrec def fib_aux(n: Int, last: Int, before_last: Int): Int = if (n == 1) last else fib_aux(n-1,before_last + last, last) fib_aux(n,1,0) } fib_better(500) // f0 = 0, f1 = 1, f2 = 1, f3 = def fact(n: Int):Int = if (n == 0) 1 else n * fact(n-1) def fact(n: Int): Int = { def fact_aux(n: Int, acc: Int): Int = if (n == 0) acc else fact_aux(n-1, n * acc) fact_aux(n,1) }