1、递归
1.1、找到递归函数
f(5) = 5 *f(4-1)
f(n) = n *f(n-1)
2.1、在递归函数内部,一定要有结束条件
3.1、随着递归的深入,要有机会到达结束条件
object RecursiveDemo1 {
def main(args: Array[String]): Unit = {
println(factorial(5))
}
/**
* 计算n的阶层
*
*/
def factorial(n:Long):Long = {
if(n==1) 1
else n * factorial(n-1)
}
2、尾递归
在 scala 中对尾递归做了优化,就不会出现栈溢出
在递归的时候,只有递归,没有任何其他运算,这就是尾递归
scala 做了优化(迭代算法),java 没有
要找到一个合适的累加器
走到最深层的时候,结果出来之后,也是最后的结果
object RecursiveDemo1 {
def main(args: Array[String]): Unit = {
println(factorial01(5,acc=1))
}
/**
* 计算n的阶层
*
*/
def factorial(n:Long):Long = {
if(n==1) 1
else n * factorial(n-1) // 这不是尾递归,有 n ,与递归平级的