1.递归函数定义:自己调用自己的函数就是递归函数,需要自己修改数据类型
(1)基本情况,是直接能求的。
(2)递归情况,是大事化小,自己调用自己
2.递归函数应用场景:适用于解决可以被分解为子问题的问题,大事化小
3.所求问题用递归函数的解决方法,代码如下:
object TestFucR {
//1.函数可以调用自己 --->递归函数
//2.函数自己调用自己,可能会导致死循环
def fn():Unit ={
print("fn")
//在函数内部再次调用自己
fn()
}
//求1*2*3*....*(n-1)*n
def getMul(n:Int): Int ={
if(n == 1) {
1
}else{
getMul(n-1)*n
}
}
def main(args: Array[String]): Unit = {
println(getMul(3))
}
//求斐波拉契数列的第n项
//记:0 1 1 2 3 5 8 13 21 34....从第3项开始 f(n)=f(n-1)+f(n-2)
//1.基本情况(直接能求的):f(0)=0,f(1)=1
//2.递归情况:f(n)=f(n-1)+f(n-2)
def fib(n:Int): Int ={
if(n == 0){
0
}else if(n ==1){
1
}else{
fib(n-1)+fib(n-2)
}
}
def main(args: Array[String]): Unit = {
println(fib(5))
}
def main(args: Array[String]): Unit = {
val a = sum1(4, 5)
println(s"a=$a")
val a2 = sum2(4, 5)
println(s"a2=$a2")
println(s"gcd=${gcd(0, 4)}")
}
//1.
def sum1(x: Int, y: Int): Int = {
return x + y
}
def sum2(x: Int, y: Int): Int = return x + y
//2.
def gcd(x: Int, y: Int): Int = {
if(x==0) y
else gcd(y%x,x)
}
}