斐波那契数列

54 阅读1分钟

斐波那契数列的定义是:

起始条件: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")
  }
}

image.png