scala 汉诺塔-递归 字面量语法

80 阅读1分钟

一. 汉诺塔 递归

var i = 0;
def hanoi(n:Int,A:String,C:String,B: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","C","B")
}

二. 字面量语法

2.1. 写法1

/**
 *函数字面量语法 另一种定义函数的方法
 */
//定义一个函数 求两个数的和
def main(args: Array[String]): Unit = {
  x + y
}

//函数字面量语法
//相对于使用def来说 它:
//1.省略了返回值类型
//2.省略了函数名 现在就是变量名
//3.多一个=>
val sum2 = (x:Int,y:Int) => {x+y}

def main(args: Array[String]): Unit = {
  println(sum1(10,20))
  println(sum2(10,20))
}

2.2. 写法2

/**
 * 函数字面量语法的简化写法
 * 1.函数体只有一句 可以省略
 * 2.参数只用一次 可以用_代替参数名 指定类型
 */

val sum1 = (x:Int,y:Int) => {x+y}
val sum2 = (x:Int,y:Int) => x+y

val sum3:(Int,Int) => Int =_+_

def main(args: Array[String]): Unit = {
  println(sum1(10,20))
  println(sum2(10,20))
  println(sum3(10,20))
}

三.部分应用函数


//定义一个函数 它用来计算三个整数的和
//def sum1(a:Int,b:Int,c:Int):Int  = {
 //  a+b+c
 // }
   
 val sum2 = (a:Int,b:Int,c:Int) => a+b+c
 

 def main(args: Array[String]): Unit = {
   //println(sum1(10,20))
   //如果参数给的不够 会报错
   //println(sum2(10,20))
   val r = sum2(10,20,_)// _表示一个占位符 现在还不知道具体是什么
   //r就是部分应用函数 对sum2而言 它只有一部分参数
   println(r(50))
   
   val r1 = sum2(_,20,_)
   println(r1(10,30))
 }