国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java使用遞歸法解決漢諾塔問題的代碼示例

2019-11-26 14:26:13
字體:
來源:轉載
供稿:網友

漢諾(Hanoi)塔問題:古代有一個梵塔,塔內有三個座A、B、C,A座上有n個盤子,盤子大小不等,大的在下,小的在上(如圖)。

201641984628317.jpg (586×209)

有一個和尚想把這n個盤子從A座移到B座,但每次只能允許移動一個盤子,并且在移動過程中,3個座上的盤子始終保持大盤在下,小盤在上。在移動過程中可以利用B座,要求打印移動的步驟。如果只有一個盤子,則不需要利用B座,直接將盤子從A移動到C。

  • 如果有2個盤子,可以先將盤子1上的盤子2移動到B;將盤子1移動到c;將盤子2移動到c。這說明了:可以借助B將2個盤子從A移動到C,當然,也可以借助C將2個盤子從A移動到B。
  • 如果有3個盤子,那么根據2個盤子的結論,可以借助c將盤子1上的兩個盤子從A移動到B;將盤子1從A移動到C,A變成空座;借助A座,將B上的兩個盤子移動到C。這說明:可以借助一個空座,將3個盤子從一個座移動到另一個。
  • 如果有4個盤子,那么首先借助空座C,將盤子1上的三個盤子從A移動到B;將盤子1移動到C,A變成空座;借助空座A,將B座上的三個盤子移動到C。

Java代碼如下:

public class Hanoi {    public static void main(String[] args) {   int disk = 3; //盤子   move(disk, 'A', 'B', 'C');  }    /*   * 根據題意,從上向下編號 => 1 ~ n   */  /**   *   * @param topN 源塔頂的盤子編號   * @param from 從哪個塔移動   * @param inter 中介,過渡的塔   * @param to 目的塔   */  private static void move(int topN, char from, char inter, char to) {   if (topN == 1) {    System.out.println("Disk 1 from " + from + " to " + to);   } else {    move(topN - 1, from, to, inter);    System.out.println("Disk " + topN + " from " + from + " to " + to);    move(topN - 1, inter, from, to);   }  }    } 

out

Disk 1 from A to C Disk 2 from A to B Disk 1 from C to B Disk 3 from A to C Disk 1 from B to A Disk 2 from B to C Disk 1 from A to C 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐池县| 五寨县| 台北市| 北碚区| 甘肃省| 呼和浩特市| 门头沟区| 叙永县| 芜湖县| 德格县| 棋牌| 永昌县| 时尚| 且末县| 灵台县| 班玛县| 大姚县| 兰坪| 福建省| 碌曲县| 台江县| 连平县| 高淳县| 龙岩市| 成安县| 富川| 阜城县| 镇赉县| 临邑县| 三门峡市| 西吉县| 新津县| 彭阳县| 黄石市| 印江| 湖南省| 赤水市| 通榆县| 青铜峡市| 凤山市| 循化|