summaryrefslogtreecommitdiffstats
path: root/Scala
diff options
context:
space:
mode:
Diffstat (limited to 'Scala')
-rw-r--r--Scala/sandbox/main.scala7
-rw-r--r--Scala/sandbox/recursion.scala29
-rw-r--r--Scala/sandbox/sqrt.scala (renamed from Scala/sqrt/sqrt.scala)13
3 files changed, 43 insertions, 6 deletions
diff --git a/Scala/sandbox/main.scala b/Scala/sandbox/main.scala
new file mode 100644
index 0000000..e770ece
--- /dev/null
+++ b/Scala/sandbox/main.scala
@@ -0,0 +1,7 @@
+
+object Main extends App {
+
+ Sqrt.run
+ Recursion.run
+
+}
diff --git a/Scala/sandbox/recursion.scala b/Scala/sandbox/recursion.scala
new file mode 100644
index 0000000..e7c29a5
--- /dev/null
+++ b/Scala/sandbox/recursion.scala
@@ -0,0 +1,29 @@
+
+object Recursion {
+
+ // Tail recursion - tail calls
+ // the function calls itself (or another one) as last action
+ // -> the function's stack frame can be reused!
+ // -> this is as efficient as a loop
+ def gcd(a: Int, b: Int): Int =
+ if (b == 0) a else gcd(b, a % b)
+
+ println(gcd(21, 56))
+
+ // there is still the multiplication to be performed
+ // -> the stack frame can't be reused
+ def fact(n: Int): Int =
+ if (n == 0) 1 else n * fact(n - 1)
+
+ println(fact(4))
+
+ // tail recursive version of factorial
+ def factr(n: Int): Int = {
+ def factIter(acc: Int, n: Int): Int =
+ if (n == 0) acc else factIter(acc * n, n - 1)
+ factIter(1, n)
+ }
+
+ def run = println(factr(4))
+
+}
diff --git a/Scala/sqrt/sqrt.scala b/Scala/sandbox/sqrt.scala
index b99d61e..2544425 100644
--- a/Scala/sqrt/sqrt.scala
+++ b/Scala/sandbox/sqrt.scala
@@ -1,5 +1,5 @@
-object Main extends App {
+object Sqrt {
def abs(x:Double) = if (x < 0) -x else x
@@ -18,10 +18,11 @@ object Main extends App {
sqrtIter(1.0)
}
- println(sqrt(2))
- println(sqrt(0.001))
- println(sqrt(0.1e-20))
- println(sqrt(1.0e20))
- println(sqrt(1.0e50))
+ def run =
+ println(sqrt(2))
+ println(sqrt(0.001))
+ println(sqrt(0.1e-20))
+ println(sqrt(1.0e20))
+ println(sqrt(1.0e50))
}