试图用scala编写斐波那契序列,我的代码哪里出错了?

试图用scala编写斐波那契序列,我的代码哪里出错了?,scala,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

我正在学习一门关于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)
            }
var prev2=0
var prev1=1

对于(y您声明了变量
prev1
prev2
两次。在
{…}
之间的第二次声明隐藏了第一次声明,编译器认为在
var g:Int=prev1+prev2
行中,您引用了以后声明的
prev1
prev2
。因此编译器编写了关于“正向参考”

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

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

对于(y,只是为了让你知道…实际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是一种过分的技巧,有很多语言更适合这种风格。

这段代码不编译。这里没有递归,这与递归编程有什么关系?@GregCarnovale如果你对我的答案满意,你可以接受它。你可以开始学习scalad函数式编程教程:,。这里列出了其他学习资源:,。或者类似的东西:
0;::fs.scan(1L)(+)
yeah..没想到,它甚至更好。