递归函数是一次又一次调用自己的函数,直到满足特定条件为止。在函数式编程中,递归起着重要的作用,作为一种函数式编程语言,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