package cffff
//递归函数
//自己调用自己的函数
//需要
object TestFucR {
//函数可以自己调用自己---->递归函数
//自己调用自己,可能会导致死循环
def fn():Unit={
println("fn")
//在函数内部再次调用自己
fn()
}
def getSum(n:Int):Unit={
if (n==1){
1
}else{
getSum(n-1)+n
}
}
def main(args: Array[String]): Unit = {
println(getSum(4))
}
/**
* 问题:求1*2*3*4*...*(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(4))
}
/**
* 问题:求裴波那契数列的第n项
* 0 1 1 2 3 5 8 13 21 34 ....
* 基本情况:f(0)=0,f(1)=1
* 递归情况: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(10))
}
/**
* 问题:求汉落塔游戏的步骤
*f(n,"A","B","C") 表示把n个盘子从 A柱子上 移动到 C柱子上,借用B柱子的过程
* f(要移动的盘子的个数,起点,辅助柱子,终点)
* 基本情况:f(n,"A","B","C"),可以直接求,从A--->C
* 递归情况:f(n,"A","B","C")
* f(n-1,"A","C","B")
* println(s"$A ---> $C")
* f(n-1,"B","A","C")
* */
def han(n:Int,A:String,B:String,C:String):Int={
if (n==1){
println(s"$A ---> $C")
}else{
//把n-1个盘子(上面的n-1个):从A-->B
han(n-1,A,C,B)
//把
println(s"$A ---> $C")
han(n-1,B,A,C)
}
}
def main(args: Array[String]): Unit = {
han(3,"A","B","C")
}
}