1·递归函数定义:自己调用自己的函数
object w01 {
def f():Unit={
println("f.........")
f()
}
def main(args: Array[String]): Unit = {
f()
println("over")
}
}
2·用途:适合用来解决两类问题:1. 可以分解为类似子问题的问题。2. 当分解到足够小的时候,可以直接求解。
案例1:计算累加
object w03 {
def f(n:Int):Int={
if(n==1) {
1
} else {
f(n-1)+n
}
}
def main(args: Array[String]): Unit = {
val rst=f(100)
println(rst)
}
}
案例2·计算阶乘
object w04 {
def f(n:Int):Int={
if(n==1) {
1
} else {
f(n-1)*n
}
}
def main(args: Array[String]): Unit = {
val rst=f(4)
println(rst)
}
}
斐波那契数列
案例
object w04 {
def f(n:Int):Int={
if(n==1) {
1
} else if(n==2) {
2
}else{
f(n-1)+f(n-2)
}
}
def main(args: Array[String]): Unit = {
val rst=f(10)
println(rst)
}
}
把输出的数字各个位置上的数字打印出来
object w05 {
def f(n: Int): Unit = {
if (n < 9) {
println(n)
} else {
println(n % 10)
f(n / 10)
}
}
def main(args: Array[String]): Unit = {
f(12345)
}
}
将n个盘子从起始柱A移动到目标柱C,需借助辅助柱B,核心步骤分为三步:
第一步:把n-1个盘子从A借助C移动到B(递归处理子问题);
第二步:把A上剩余的1个盘子直接移动到C;
第三步:把B上的n-1个盘子借助A移动到C(再次递归处理子问题)
object w06 {
def f(n:Int,A:Char,B:Char,C:Char):Unit={
if(n==1){
println(s"${A}--->${C}")
}else{
f(n-1,A,C,B)
println(s"${A}--->${C}")
f(n-1,B,A,C)
}
}
def main(args: Array[String]): Unit = {
f(4,'A','B','C')
}
}