Nimrod007' answer is sufficient, But I also like to add some points.
Adding @tailrec
definitely clears a benefit of doubt in code.
You IDE might detect function as tail recursive but Scala might not, This is why it is better to add @tailrec
to the function.
You can refer the code below.
import scala.annotation.tailrec
object Application extends App {
println("Hello World")
val i = 60000
// val i = 1000
GetSum().trueTailRecursion(i)
println("\nCompleted")
GetSum().maybeTrueTailRecursion(i)
}
case class GetSum() {
def maybeTrueTailRecursion(i: Int): Int = {
print(".")
if(i==1) 1
else maybeTrueTailRecursion(i - 1)
}
@tailrec
final def trueTailRecursion(i: Int): Int = {
print(".")
if(i==1) 1
else trueTailRecursion(i - 1)
}
}
In the above example,
trueTailRecursion will be able to print dotted line but
maybeTrueTailRecursion will crash with StackOverFlowError.
Although the function is same.