06递归

本文最后更新于 2021-08-05 11:42:59

递归

object RecursiveDemo1 {
  def main(args: Array[String]): Unit = {
    println(factorial(10))
    println(factorial(1, 10))
  }

  def factorial(n: Int): Int = {
    if (n == 1) 1
    else
      n * factorial(n - 1)
  }

  
  //尾递归
    
  //加上tailrec还不报错就是尾递归 
  //这个注解可加可不加
  @tailrec
  def factorial(multiplication: Long, n: Int): Long = {
    if (n == 1) {
      multiplication
    } else {
      factorial(multiplication * n, n - 1)
    }
  }
}

/*
1.有递归算法
2. 在递归函数内部有结束条件
3. 随着递归深入,有机会到达结束条件
4. 返回值不能推导

尾递归
1.scala对尾递归有优化(优化成迭代算法),不会出现 StackOverFlow
2.在递归的时候只有递归,没有任何其它运算
3.递归走到最深层不用一层一层返回
 */

06递归
https://jiajun.xyz/2020/11/03/scala/06递归/
作者
Lambda
发布于
2020年11月3日
更新于
2021年8月5日
许可协议