我正在学习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)
}
答案 0 :(得分:0)
您声明变量prev1
和prev2
两次。 {...}
之间的第二个声明隐藏在第一个声明之后,编译器认为在行var g : Int = prev1 + prev2
中您引用了稍后声明的prev1
和prev2
。所以编译器写了关于&#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是一种矫枉过正,有很多语言更适合这种风格。