Vas*_*asu 5 recursion functional-programming scala tail-recursion function
我正在尝试以下面的方式编写尾递归函数,但编译器抛出错误:
方法的参数太多了:(v1: Int)Int in trait Function1 else factorial(x-1, x*acc)
我曾尝试用 Function2 替换 Function1 并给 Function2[Int, Int, Int] = new Function2[Int, Int, Int]
但它仍然给我带来了同样的错误。有人能指出我哪里出错了吗?
import scala.annotation.tailrec
var factorial: Function1[Int, Int] = new Function1[Int, Int] {
@tailrec override def apply (x:Int, acc:Int=1): Int = {
if (x<=1) acc
else factorial(x-1, x*acc)
}
}
factorial(5)
Run Code Online (Sandbox Code Playgroud)
当你传递两个参数时,你apply
里面Function1
必须只带一个参数。
您可以按如下方式重写它:
var factorial: Function1[Int, Int] = new Function1[Int, Int] {
def apply (x:Int): Int = {
@tailrec def loop(x: Int, acc: Int = 1): Int = {
if (x<=1) acc
else loop(x-1, x*acc)
}
loop(x)
}
}
Run Code Online (Sandbox Code Playgroud)