# Question: this are different exercise you must not use while...

###### Question details

**this** **are** **different
EXERCISE**

* You MUST NOT use while loops or (re)assignment to variables (you
can use "val" declarations,

* but not "var" declarations). You must use recursion
instead.

*

* You may declare auxiliary functions if you like.

*

* SUBMISSION

*/

object fp1 {

// EXAMPLE: here is the definition of the factorial
function.

def fact (n : Int) : Int = {

if (n <= 1)

1

else

n * fact (n - 1)

}

// EXERCISE 8: complete the following definition of the function
"max" that finds the maximum

// integer in a list of integers. Note that no value can be
returned when the list is empty,

// hence the "NoSuchElementException". Your function MUST be
recursive and MUST NOT use a while

// loop. You MUST NOT use the "max" method on lists, but can use
the "max" method on integers.

def max (xs : List[Int]) : Int = {

// TODO: Provide definition here.

-1

}

// EXERCISE 9: given the definition of the function
"maxTailRecursive" below, complete the

// definition of the function "maxTailRecursiveAux" so that
"maxTailRecursive" also finds the

// maximum of a list of integers. You must not alter the definition
of "maxTailRecursive". Your

// definition for "maxTailRecursiveAux" must be recursive and not
use while loops.

def maxTailRecursiveAux (accumulator : Int, xs : List[Int]) : Int =
{

// TODO: Provide definition here.

-1

}

def maxTailRecursive (xs : List[Int]) : Int = {

xs match {

case Nil => throw new RuntimeException ()

case y::ys => maxTailRecursiveAux (y, ys)

}

}

// EXERCISE 10: Write a recursive function "otpu" ("upto"
backwards) that takes two Int parameters

// "start" and "end" and produces a "List[Int]" that counts DOWN
from "start" to "end" (inclusive

// at both ends) one at a time. If "start < end", the empty list
must be returned.

def otpu (start : Int, end : Int) : List[Int] = {

// TODO: Provide definition here.

null

}

}