你如何调用一个以二元组为参数的函数,并在Scala中返回一个二元组的元组?

时间:2015-11-10 10:07:27

标签: scala fibonacci

我对Scala很新。我被分配了编码Fast Fibonacci算法的任务。在实际调用函数时,我发现很难。该函数采用2的元组,结果返回2的元组。我不知道我的fibStep逻辑是否正确,但是只要我能够真正测试该函数,我就会知道。以下是我到目前为止:

def fastFib(x: Long ): Long = {
def fibStep(x:(Long, Long)): (Long, Long) = {
   //setting temporary variables a and b
   def a = x._1
   def b = x._2

   //applying the fast Fibonacci algorithm
   def c = a * (b * 2 - a)
   def d = a * a + b * b

   if (c+d % 2 == 0) return (c,d)
   else return (d, c+d)
  }

  def tuple = (x-1,x-2)
  return fibStep(tuple)
 }

我需要将元组(x-1,x-2)传递给fibStep。我该怎么做?感谢

2 个答案:

答案 0 :(得分:1)

问题出在return语句中。你试图返回元组,而不是Long。

修正:

def fastFib(x: Long ): Long = {     
   ...
   return fibStep(tuple)._1  // or ._2
}

注意:我不确定您的算法是否正确

答案 1 :(得分:0)

你在这里遇到了很多问题。

def用于定义函数

val应该用于定义变量

不应使用

return。你只是将它作为表达式中的最后一个值'返回'结果。

仅使用括号定义元组:

val myTuple = (1,2)

有了这些信息,你应该能够更好地尝试它。