Scala尾递归错误

时间:2013-10-11 00:32:52

标签: scala exception tail-recursion

下面是我尝试使用尾递归编写的简单'重复'方法。这个函数的唯一目的是只重复给出字符串'n'次。

即。 repeat(“Hello”,3)=“HelloHelloHello”

但无论出于何种原因我得到'java.lang.UnsupportedOperationException',我不知道为什么。

P.S。这是一个家庭作业,所以如果我可以指向正确的方向,而不是一个很酷的直接答案!

  def repeat(s: String, n: Int): String = {
    def tailRepeat(str: String, x: Int): String = x match {
      case `n` => str
      case _ =>  val repeatString = s + str
      tailRepeat(repeatString, (x + 1))
    }
    tailRepeat(s, 0)
  }

1 个答案:

答案 0 :(得分:3)

我认为你让这个太复杂了。首先,你根本不需要模式匹配,你有一个计数变量,告诉你重复你的字符串多少次,使用它会大大简化你的代码。倒数计数通常更直接而不是:

def repeat(s: String, n: Int): String = {
    def tailRepeat(str: String, x: Int): String = {
        if(x == 0) str
        else       tailRepeat(str + s, x - 1)
    }
    tailRepeat(s, n - 1)
}

println( repeat("hello", 3) );
// hellohellohello