递归



package chapter05 object test03 { def main(args:Array[String]):Unit={ //1.创建迷宫,使用二维数组map(8)(7) val map = Array.ofDim[Int](8,7) //2.给地图加墙 //0:没有探测过 //1:表示墙 //2. 表示经过探测是通路 //3. 表示经过探测是死路 //最上边和下边加墙 for(i <- 0 until 7){ map(0)(i)=1 map(7)(i)=1 } //最左边和最右边加墙 for(i <- 0 until 6){ map(i)(0)=1 map(i)(6)=1 } map(3)(1)=1 map(3)(2)=1 map(2)(2)=1 println("迷宫的情况是:") for(row <- map){ for (item <- row){ printf("%d ",item) } println() } setWay(map,1,1) println("迷宫的情况是:") for(row <- map){ for (item <- row){ printf("%d ",item) } println() } //编一个方法,探测该点是否可以走 // map:地图,i探测位置的横坐标,j 探测位置的纵坐标 def setWay(map:Array[Array[Int]],i:Int,j:Int): Boolean ={ if(map(6)(5)==2){//路走通 return true }else{//map的可能取值为0,1,3 if(map(i)(j)==0){//说明该点还没有探测过 //使用策略探测该点(下=》右=》上=》左) //假定这个点是走的通map(i)(j)=2 map(i)(j)=2 if(setWay(map,i+1,j)){//向下 return true }else if(setWay(map,i,j+1)){//向右 return true }else if(setWay(map,i-1,j)){//向上 return true }else if(setWay(map,i,j-1)){//向左 return true }else{ //说明四个方向都走不通,假设错误 map(i)(j)=3 return false } }else{//1,2,3 return false } } } } }
package chapter05 object hannoTower { def main(args:Array[String]):Unit={ hannoTower(3,'a','b','c') } def hannoTower(num:Int,a:Char,b:Char,c:Char):Unit={ //如果只有一个盘子 if(num==1){ println("盘子1"+ " "+a+"=>"+c) }else{ //如果有两个或者两个以上的盘子 //1.将a塔 上面的盘 a=>b //2.将a塔 最下面的盘 a=>c //3.将b塔的所有盘移动到c, b=>c hannoTower(num-1,a,c,b) println("盘子"+num + " "+a+"=>"+c) hannoTower(num-1,b,a,c) } } }
posted on 2020-08-27 18:31 happygril3 阅读(115) 评论(0) 收藏 举报
浙公网安备 33010602011771号