【问题标题】:What is wrong with this Scala recursive code?这个 Scala 递归代码有什么问题?
【发布时间】:2018-06-28 14:53:28
【问题描述】:

我最近开始学习 Scala 并尝试在其中实现递归函数。本练习的目标是返回斐波那契数列中的第 n 个数字。

def fib(n: Int ): Int = {

  def go(n:Int, prev:Int, curr: Int, res:Int): Int =
    if (n == 0 ) res
    else go(n-1, curr, prev+curr, prev+curr)

    go (n, 0, 1, 0 )
}

def main(args: Array[String]): Int =
  println(fib(7))

没有编译错误,但是结果是左括号和右括号。

结果--> ()

任何建议。

【问题讨论】:

  • 请详细说明,做了什么,你在哪里停留等等。stackOverFlow 不鼓励how-to-do-this 类型的问题..
  • 执行此代码会导致左括号和右括号 [my result : ()]。
  • 你永远不会从fib 打电话给gofib 不返回任何内容,它的返回类型为 Unit。递归调用的基本情况是 7,这绝对不是斐波那契数列的两个基本情况之一。
  • go (n, 0, 1, 0 ) 应该在方法 go 之外。
  • @JithinScaria。我可能是新来的,但我知道人们在 stackOverFlow 中会问什么样的问题。因此,如果您不知道答案或愿意提供帮助,那么您不必急于求成,尝试对每个问题发表评论。

标签: scala recursion fibonacci


【解决方案1】:

终于,我明白了。

这是我的做法。

def fib(n: Int ) : Int = {    
 def go(n: Int, prev: Int, curr: Int, res: Int): Int =     

 if (n == 0 ) res     
 else go(n-1, curr, prev+curr, prev+curr)     

 go (n-2, 0, 1, 0 )
}
def main(args: Array[String]): Unit = 
   println(fib(10))

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2014-08-29
    • 2013-06-05
    相关资源
    最近更新 更多