尾递归实现

Tail recursion implementation

在尾递归中,递归调用后就没有什么可做的了。但是该调用可以与条件逻辑混合吗?

喜欢,下面是尾递归的实现示例:

def fibonacci(n:Int):Int = {
  def go(count:Int, n1: Int, n2:Int): Int = {
    if(count == n){
      n1+n2
    }else{
      val x = n2
      val y = n1+n2
      go(count+1,x,y)
    }
  }
  if(n == 1){
    0
  }else{
    if(n == 2){
      return 1
    }else{
      go(3,0,1)
    }
  }
}

在尾递归中,你可以做任何你想做的逻辑!不要紧。重要的是该方法的最后一行,或者换句话说,您的方法 return 所在的每个地方实际上都应该是递归调用,或者该方法应该 return 完全退出!

所以基本上,您将尾递归视为一个 while 循环!

查看此处了解更多信息:Understanding the Idea behind Tail Recursion in Scala