Scala的递归函数二

59 阅读1分钟

内容:

1. 用递归求解a的n次方;

2. 用递归拆分数字的各位数字;

3. 用递归求解汉诺塔问题。

例:a的n次方

a的n次方就是n个a相乘。

起始条件:f(a,0) = 1 , f(a,1) = a

递归规则:f(a,n) = a * f(a, n-1)(当 n ≥ 1)。求它的第n项。

object xy22 {
  //案例:a的n次方
  //起始条件:f(a,0) = 1 ,f(a,1) = a
  //递归规则:f(a,n) = a * f(a,n-1)(当n>=1),求它的第n项
  def f(a: Int, n: Int): Int = {
    if (n == 0) {
      1
    } else {
      a * f(a,n-1)
    }
  }
  def main(args: Array[String]): Unit = {
    val s = f(2,3)
    println(s)
  }
}

打印数字的各个位数

任务描述:对于整数1234,依次输出1,2,3,4这4个数字。

起始条件:f(n) = 输出个位 ,  n<9

递归规则:f(n) = f(n/10)+ 输出个位(当 n ≥ 10)

def f(n: Int) = {  
  if(n < 9){  
    print(n%10)  
  } else {  
    f(n/10)  
    print(n%10)  
  }  
}

汉诺塔游戏

递归函数的规则:

起始条件:f(1) = 从A直接移动到C 

递归规则:f(n) = 把n-1从A移动到B, 把1从A移动到C, 把n-1从B 移动到C

f(n,a,b,c): 把n个盘子从a移动到c,借助b。

object xy23 {
  //汉诺塔游戏
  //A:起点C:终点B:可以借助的柱子
  def f(n:Int,A:String,C:String,B:String):Unit = {
    if(n==1){
      println(s"${A} → ${C}")
    }else{
      f(n-1,A,B,C)
      println(s"${A} → ${C}")
      f(n-1,B,C,A)
    }
  }

  def main(args: Array[String]): Unit = {
    f(5,"A","C","B")
  }
}