object TestFuckR { // 3.求斐波那契数列的第n项 // 记为f(n)表示1 1 2 3 5 8 13 21 34...的第n项 // (1)基本情况。可以直接求解,避免死循环。f(1)=1 // (2)递归情况。大事化小,递归求解。f(n)=(n-1)+(n-2) // def getFib(n:Int):Int ={ if (n==1){ 1 }else if (n==2){ 1 }else{ getFib(n-1)+getFib(n-2) } } def main(args: Array[String]): Unit = { var s = getFib(6) println(s) }
//记:han (n,起点,过渡柱子,终点)表示:把n个盘子,从起点位置,借助柱子过渡
def han(n:Int,A:String,B:String,C:String):Unit = { if(n == 1){ println(s"$A ---> $C") }else{ // 1.前n-1个,从A->B,用c过渡 han(n-1,A, B, C) // 2.把1个盘子从A->C println(s"$A ----> $C") // 3.前n-1个,从B->C用A过渡 han(n-1,B,A,C) } } def main(args: Array[String]): Unit = { han(3,"A","B","C") }
}