Scala中的递归函数

Scala中的递归函数

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