递归函数是一次又一次调用自己的函数,直到满足特定条件为止。在函数式编程中,递归起着重要的作用,作为一种函数式编程语言,Scala也支持递归函数。
因此,递归函数再次调用相同的代码块,直到结束条件变为真。大多数需要多次添加或执行某些特定计算的程序都使用递归。这是一个更好的选择,而不是需要中断条件的无限while循环。在Scala中,break易于出现异常,并且编程有些棘手,因此最好使用递归函数代替它。
语法:
def recFun(arguments){
if(condition )
return value
else
return argument * recFun(next_arguments)
} 语法说明:
这里recFun是使用一组参数的递归函数。这些参数集主要是单个参数,该参数是要用于计算的整数。然后,在函数的主体中,存在一个if条件,该条件用于检查是否调用递归函数。对于条件的TRUE值,将执行最终返回,并且代码流返回到代码的调用块。对于FALSE值,条件将再次执行程序指定的任务(此处使用*)来执行递归函数。
例子:
1)在Scala中使用递归打印数字的阶乘
object myClass {
def factorial(n: BigInt): BigInt = {
if (n == 1)
1
else
n * factorial(n - 1)
}
def main(args: Array[String]) {
println( "Factorial of " + 25 + ": = " + factorial(25) )
}
}输出结果
Factorial of 25: = 15511210043330985984000000
示例说明:
上面的代码是打印数字的阶乘。由于阶乘可能具有巨大的值,因此我们将BigInt用于结果。为了避免溢出情况。这会增加代码的存储空间,但很重要,因为如果将Int用作数据类型,则阶乘25会导致错误。
2)在Scala中使用递归打印数字的斐波那契数
object myClass {
def fibonacci(previous1 : Int, previous2 : Int , counter : Int , condition : Int ){
print( ", "+(previous1 + previous2))
if((counter+1) < condition){
fibonacci(previous2, (previous1 + previous2), (counter+1) , condition)
}
}
def main(args: Array[String]) {
println( "Fibonacci series till " + 15 + ": = ")
print("0 , 1")
fibonacci(0,1,2,15)
}
}输出结果
Fibonacci series till 15: = 0 , 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377