斐波那契数列的定义是:
起始条件:f(0) = 0 , f(1) = 1
递归规则:f(n) = f(n-1) + f(n-2)(当 n ≥ 2)。求它的第n项。
object inoout53 {
/*
求斐波那契数列数据的第n项
f(1)=1
f(2)=2
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(args:Array[String]):Unit = {
val rst=f(5) //8
println(rst)
}
}
object inoout54 {
/*
求a的n次方 ,a*a*a..*a(n)
f(a,0)=1
f(a,n)=a*f(a,n-1)
*/
def f(a:Int,n:Int):Int= {
if (n == 0) {
1
}
else {
a*f(a,n-1)
}
}
def main(args:Array[String]):Unit = {
val rst=f(2,3) //8
println(rst)
}
}
汉诺塔游戏 cn.freewebsudoku.com/webgames/to…
【讲解游戏说明】有三根柱子,标记为A、B、C,A柱子上有n个大小不同的盘子,盘子从下到上按照大小递增排列。现在需要将A柱子上的所有盘子移动到C柱子上,移动过程中可以借助B柱子,但是每次只能移动一个盘子,并且大盘子不能放在小盘子上面。
object inoout55 {
/*
求a的n次方 ,a*a*a..*a(n)
f(a,0)=1
f(a,n)=a*f(a,n-1)
*/
var i=1
def f(n: Int, A: String, C: String, B: String): Unit = {
if (n == 1) {
println(s"$i move 1 from $A → $C")
i+=1
}else{
f(n-1,A,B,C)
println(s"$i move $n from $A → $C")
i+=1
f(n-1,B,C,A)
}
}
def main(args:Array[String]):Unit = {
f(5,"A","B","C")
}
}