递归概念
递归调用:一个函数在函数体内又调用了本身**
重要原则:
- 程序执行一个函数时,就创建一个新的受保护的独立空间(即新函数栈)
- 函数的局部变量是独立的,不会相互影响
- 递归到最后一定可以退出,否则会陷入无限循环
- 一个函数执行完毕或遇到 return,就会返回,谁调用就将结果返回给谁
注意:递归必须指定返回值类型,因为编译器无法推断出最终的返回值类型
应用案例
需求:有斐波那契数“1,1,2,3,5,8…”,给一个整数 n,求结果?(提示:正常递归或尾递归)
object Fibonacci {
def main(args: Array[String]): Unit = {
println(fib(12)) // 144
println(tailFib(12, 1, 1)) // 144
}
def fib(n: Int): Int = {
if (n == 1 || n == 2) {
1
} else {
fib(n - 1) + fib(n - 2)
}
}
def tailFib(n: Int, v1: Int, v2: Int): Int = {
if (n == 1 || n == 2) {
v2
} else {
tailFib(n - 1, v2, v1 + v2)
}
}
}