递归函数2

87 阅读1分钟

斐波那契数列

斐波那契数列的定义是:

  1. 起始条件:f(0) = 0 , f(1) = 1
  2. 递归规则:f(n) = f(n-1) + f(n-2)(当 n ≥ 2)。求它的第n项。

基本案例一:求斐波那契数列的前n项和

/**
 * 求斐波那契数列的第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)
}

基本案例二:求a的n次方

/**
 * 求a的n次方,a*a*a*a*a*....*a(n个a)
 *
 *
 * 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)  //4*3*2*1
  println(rst)
}

经典递归函数:汉诺塔游戏

代码如下

/**
 * 汉诺塔,递归函数
 *
 */
var i=1;
def hanoi(n: Int,A: String, B: String, C: String): Unit = {
  if (n == 1) {
    println(s"$i, move 1 from $A$C")
    i+=1
  } else {
    hanoi(n - 1, A, B, C)
    println(s"$i,move $n from $A$C")
    i+=1
    hanoi(n - 1, B, C, A)
  }
}

def main(args: Array[String]): Unit = {
  //4个盘子,从A移动到C,借助B
  hanoi(4, "A", "B", "C")
}