Scala中的尾递归

Scala尾递归

一种特殊类型的递归,它将递归调用作为代码执行中的最后一件事。这种尾部递归使编译器可以优化程序。

让我们深入研究什么是尾递归?

尾递归是一种递归,从去年发起。它比普通的(非尾)递归更好,因为编译器能够优化它,即在执行递归时花费更少的时间和内存。

尾递归函数取入堆栈相比于由正常递归,它有一个堆栈空间为每个递归所需的存储器,因为只有单个空格。

语法:

要调用尾递归方法,请使用以下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的方法,该函数负责计算值。