progs/collatz_sol.scala
author Christian Urban <urbanc@in.tum.de>
Tue, 08 Nov 2016 10:30:42 +0000
changeset 15 52713e632ac0
parent 11 progs/collatz.scala@417869f65585
child 17 ecf83084e41d
permissions -rw-r--r--
updated

// Part 1 about the 3n+1 conceture
//=================================


//(1) Complete the collatz function below. It should
//recursively calculates the number of steps needed 
//number until a series ends with 1

def collatz(n: Long): List[Long] = ...


// an alternative that calculates the steps directly
def collatz1(n: Long): Int =
  if (n == 1) 1 else
    if (n % 2 == 0) (1 + collatz1(n / 2)) else 
      (1 + collatz1(3 * n + 1))


//(2)
def collatz_max(bnd: Int): Int = {
  (for (i <- 1 to bnd) yield collatz(i).length).max
}


val bnds = List(10, 100, 1000, 10000, 100000, 1000000, 10000000)

for (bnd <- bnds) {
  val max = collatz_max(bnd)
  println(s"In the range of 1 - ${bnd} the maximum steps are ${max}")
}