### Function - Recursion and Tail Recursion

Recursion function

is a function that calls itself continuously. This technique is called recursion,

Tail recursion

is a recursion that performs the calculation first, then makes the recursive call. The result of the current step is passed into the next recursive call.

Example: Find the factorial of a Number using Recursion
`fun main(args: Array<String>) {    val number = 4    val result: Long    result = factorial(number)    println("Factorial of \$number = \$result")}fun factorial(n: Int): Long {    return if (n == 1) n.toLong() else n*factorial(n-1)}`
How this program works?
`Here are the steps involved:factorial(4)              // st function call. Argument: 44*factorial(3)            // nd function call. Argument: 34*(3*factorial(2))        // rd function call. Argument: 24*(3*(2*factorial(1)))    // th function call. Argument: 1 4*(3*(2*1))                 24`

## Tail recursion

is a recursion that performs the calculation first, then makes the recursive call. The result of the current step is passed into the next recursive call.

The recursive call must be the last call of the method.

To tell the compiler to perform tail recursion in Kotlin, you need to mark the function with tailrec modifier.

`fun main(args: Array<String>) {      val number = 4      val result: Long      result = factorial(number)      println("Factorial of \$number = \$result")  }    tailrec fun factorial(n: Int, run: Int = 1): Long {      return if (n == 1){          run.toLong()      } else {          factorial(n-1, run*n)      }  }  Output:Factorial of 4 = 24`