试图在scala中编写Fibonacci序列,我的代码在哪里出错?

时间:2017-09-01 20:12:14

标签: scala

我正在学习Udemy的课程以学习Spark,我对scala和递归编程完全不熟悉。当我试图在eclipse中的.sc编辑器中从这个循环中返回时,我没有输出到右边。如果有帮助,我可以提供更多背景信息。

 var prev2 = 0
 var prev1 = 1
 for (y <- 1 to 10){
            var g : Int = prev1 + prev2
            var prev2 : Int = prev1
            var prev1 : Int = g
            println(g)
            }

2 个答案:

答案 0 :(得分:0)

您声明变量prev1prev2两次。 {...}之间的第二个声明隐藏在第一个声明之后,编译器认为在行var g : Int = prev1 + prev2中您引用了稍后声明的prev1prev2。所以编译器写了关于&#34;前向参考&#34;。

的错误消息

修复代码的最简单方法是:

var prev2: Int = 0
var prev1: Int = 1
for (y <- 1 to 10){
  var g : Int = prev1 + prev2
  prev2 = prev1
  prev1 = g
  println(g)
}

除了事实之外,这肯定不是recursive programming

答案 1 :(得分:0)

只是为了让你知道......实际真正的scala中的斐波那契看起来像这样:

lazy val fs: Stream[Long] = 0 #:: 1  #:: fs.zip(fs.tail).map { case(a,b) => a + b }
fs.take(11).map(println)

如果你要使用vars一个循环,scala是一种矫枉过正,有很多语言更适合这种风格。