一种特殊类型的递归,它将递归调用作为代码执行中的最后一件事。这种尾部递归使编译器可以优化程序。
让我们深入研究什么是尾递归?
在尾递归是一种递归,从去年发起。它比普通的(非尾)递归更好,因为编译器能够优化它,即在执行递归时花费更少的时间和内存。
甲尾递归函数取入堆栈相比于由正常递归,它有一个堆栈空间为每个递归所需的存储器,因为只有单个空格。
语法:
要调用尾递归方法,请使用以下import语句,
import scala.annotation.tailrec
定义尾部递归函数的语法,
@tailrec def function_name (parameter list) : return_type = { //要执行的代码 }
该语法用于定义尾部递归函数,但要使用它,则需要从包中导入它。并且代码将在函数的最后一段中调用该函数。
例:
import scala.annotation.tailrec object Factorial { def fact(n: Int): Int = { @tailrec def calFact(acc: Int, n: Int): Int = { if (n <= 1) acc else calFact(n * acc, n - 1) } calFact(1, n) } def main(args:Array[String]) { println("8的阶乘是 " + fact(8)) } }
输出结果
8的阶乘是 40320
说明:
该程序用于计算给定数字的阶乘(在这种情况下为8)。在主要部分中,我们将调用一个fact()
具有尾递归函数calFact的方法,该函数负责计算值。