需求
递归实现阶乘。
分析
- 递归先找到程序的出口,本需求中就是当n=1时返回1。
- 如果不是程序的出口,那么就调用n*f(n-1)。
代码实现(踩坑版)
object Scala04_Recursion {
def main(args: Array[String]): Unit = {
def recursion(n: Int): Int ={
if (n == 1){
1
}
n * recursion(n-1)
}
println(recursion(4))
}
}
当执行上面的代码时,就会看到一个特别醒目的错误:StackOverflowError。
错误原因
Scala代码中,if方法是有返回值的,返回值就是最后一行代码的值!!我们的程序在执行过程中,一直会调用n * recursion(n-1),而找不到出口。而我们的方法是在栈内存中执行,所以会报栈内存溢出的错误。
代码实现(正确版)
object Scala04_Recursion {
def main(args: Array[String]): Unit = {
def recursion(n: Int): Int ={
if (n == 1){
return 1
}
n * recursion(n-1)
}
println(recursion(4))
}
}