一.定义
1. 自己调用自己的函数,可能会产生死循环
2. 适合解决一类问题
1. 可以被分解为类似子问题
2. 当分解到足够小的时候,问题可以直接求解
3. 通项公式: (n)=1+2+3+.....+n--->f(n)=f(n-1)+n
def f():Unit = {
println("f....被调用了")
f()
}
def main(array: Array[String]):Unit = {
f()
println("over")
}
if (n == 1) {
1
} else {
f(n - 1) + n
}
}
def main(array: Array[String]): Unit = {
val rst = f(4)
println(rst)
}
def f(n: Int): Int = {
if (n == 1) {
1
} else {
f(n - 1) * n
}
}
def main(array: Array[String]): Unit = {
val rst = f(4)
println(rst)
}
- 题3:斐波那契数列/黄金分割率/兔子算法--->f(n)=f(n-1)+f(n-2)
def f(n: Int): Int = {
if (n == 1) {
1
} else if(n == 2){
2
}else {
f(n - 1) + f(n-2)
}
}
def main(array: Array[String]): Unit = {
val rst = f(10)
println(rst)
}
def f(n: Int): Unit = {
if (n < 9) {
println(n)
} else {
f(n / 10)
println(n % 10)
}
}
def main(array: Array[String]): Unit = {
f(123456789)
}
}
- 题5:按数字大小依次叠加,找出移动次数最少的解法(从A柱移动到C)
def f(n: Int,A:Char,B:Char,C:Char): Unit = {
if (n == 1) {
println(s"${A}---->${C}")
} else {
f(n-1,B,A,C)
println(s"${A}---->${C}")
f(n-1,B,A,C)
}
}
def main(array: Array[String]): Unit = {
f(4,'A','B','C')
}
}