1. 程式人生 > >Java 遞迴實現漢諾塔問題

Java 遞迴實現漢諾塔問題

漢諾塔問題就是:有ABC三根柱子,A柱子上從上到下摞了很多體積依次遞增的圓盤,如果將圓盤從A移動到C柱子,且依然保持從上到下依次遞增。

class Hanio{
	public void moveOne(int n, String init, String desti){    //只有一個盤子的情況
		System.out.println(" move:"+n+" from "+init+" to "+desti);
	}
	public void move(int n, String init, String temp, String desti){
		if(n <= 0){
			System.out.println("number error");
			return;
		}
		else if(n == 1){
			moveOne(n,init,desti);
		}else{
			move(n-1, init, desti, temp);//首先將上面的(n-1)個盤子從init杆藉助desti杆移至temp杆  
			moveOne(n, init, desti);     //然後將編號為n的盤子從init杆移至desti杆  
			move(n-1, temp, init, desti);//最後將上面的(n-1)個盤子從temp杆藉助init杆移至desti杆   
		}
	}
}
class HanioApp{
	public static void main(String args[]){
		Hanio hanio = new Hanio();
		hanio.move(3, "A", "B", "C");
	}
}
執行結果:
 move:1 from A to C
 move:2 from A to B
 move:1 from C to B
 move:3 from A to C
 move:1 from B to A
 move:2 from B to C
 move:1 from A to C



相關推薦

Java 實現問題

漢諾塔問題就是:有ABC三根柱子,A柱子上從上到下摞了很多體積依次遞增的圓盤,如果將圓盤從A移動到C柱子,且依然保持從上到下依次遞增。 class Hanio{ public void moveOn

java問題

原始碼的github地址,可以下載到本地執行 package stack.demo; /** * 漢諾塔問題: * 假設有三根柱子,x y z * x上有3個圓盤,從底部開始從大到小編號為n 到 1 * 若每次只能移動一個圓盤,且大圓盤不能在小圓盤上面 * 現在需要將3個

實現問題

雖然搞程式多年了,對遞迴演算法還是有些打怵。遞迴本身好理解,但其各層巢狀卻容易將人繞暈,遞迴的漢諾塔問題就將我搞暈了多次。我搜了好多資料,也查閱了好多書籍,但都是泛泛而談,不夠詳細,下面是我精心總結一下漢諾塔問題。 漢諾塔的問題:(百度百科引用) 漢諾塔問題是源於印度一個古

c語言實現

程式碼不是自己寫的,copy資料結構書上的,看的懂,但是寫不出來。 //程式碼很簡潔,但卻是經典 #include <stdio.h> int count =0; void move(char x,int n,char y) {     co

C++_實現

A為存放盤子的塔,B為目標塔,C為輔助塔 演算法分為三步 一、將A上n-1個盤子全部放到C塔上 二、將A上剩下的一個盤子放到B塔上 三、將C塔上的盤子全部放到B塔上 注:不需要考慮如何移動n-

用Python實現問題

問題描述 漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,

Java 通過求解問題 原始碼 經典問題講解

漢諾塔問題描述:有三根柱子 A、B、C ,在A從下向上按照從大到小的順序放著64個圓盤,以B為中介,把盤子全部移動到C上。移動過程中,要求任意盤子的下面要麼沒有盤子,要麼只能有比它大的盤子。 分析:為了將N個盤子從A移動到C,需要先把第N個盤子上面的N-1個盤子移動到B上,這樣才能將第

實現實現問題

漢諾塔 遞歸實現 char else noi spa java pre demo 1 public class JavaDemo { 2 private int c = 0; 3 4 public static void main(String[

python_實現

style col express 表達 pan 漢諾塔 div 歸納 tex 在遞歸的時候,和數學的歸納法一致。 void func( mode) { if(endCondition) { constExpression

《零基礎入門學習Python》(24)--

前言 這節課主要講解用遞迴的方法,實現漢諾塔的解答  知識點 這節課主要講解用遞迴的方法,實現漢諾塔的解答  對於遊戲的玩法,我們可以簡單分解為三個步驟: 1) 將前63個盤子從X移動到Y上。  2) 將最底下的第64個盤子從X移動

方法----問題

遞迴思想解決 漢諾塔問題 1 package Recursive; 2 3 public class TestHanoi { 4 public static void main(String[] args) { 5 hanoi(3,'A','B','C'); 6

經典演算法

函式的遞迴 前進(規模縮小),邊界條件,返回段,自己呼叫自己 在寫漢諾塔之前 先給大家介紹下遞迴演算法 舉個例子:我要寫一個我自己的列印函式 Myprint()將12345 這個數 挨個數字 打印出來 void MyPrint(int n) { if(n > 10) M

問題

1.題目 2.思路     1、把A上面n-1個盤子移動到B上。    2、把A上最後一個移動到C;    3、把B上n-1個移動到A上,再把B上最後一個移動到C; 如此

經典解決

演算法:當只有一個盤子的時候,只需要從將A塔上的一個盤子移到C塔上。             當A塔上有兩個盤子是,先將A塔上的1號盤子(編號從上到下)移動到B塔上,再將A塔上的2號

基礎演算法學習——

#include<stdio.h> int count=0; void move (int n,char x,char y) { printf("第%d次,將%d號盤從%c移到%c上\n",++count,n,x,y); } void hanoi(int n,char A,char

【資料結構】演算法—

漢諾塔的問題,也是一個經典的遞迴演算法問題。 下面是自己總結的一張整體流程圖。 下面是程式碼,程式碼雖簡單,但理解其內部執行原理很重要。 //=========================

解決

漢諾塔簡介 大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。 經典題目:

演算法——問題

題目: 有三根相鄰的柱子,標號為A,B,C,A柱子上從下到上按金字塔狀疊放著n個不同大小的圓盤,要把所有盤子一個一個移動到柱子B上,並且每次移動同一根柱子上都不能出現大盤子在小盤子上方,請問至少需要多少次移動? 解答過程: import java.util.Scanner

圖解問題( Java 實現

漢諾塔簡介 最近在看資料結構和演算法,遇到了一個非常有意思的問題——漢諾塔問題。 先看下百度百科是怎麼定義漢諾塔的規則的: 漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按