06递归

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

递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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日
许可协议