商務(wù)部網(wǎng)站建設(shè)情況匯報公司seo排名優(yōu)化
1、有三根相鄰的柱子,標(biāo)號為A,B,C。
2、A柱子上從下到上按金字塔狀疊放著n個不同大小的圓盤。
3、現(xiàn)在把所有盤子一個一個移動到柱子C上,并且每次移動同一根柱子上都不能出現(xiàn)大盤子在小盤子上方。
題解步驟
1、當(dāng)n=1時;
將1號從A移動到C即可
2、當(dāng)n=2時;
第一步:將1號從A移動到B
第二步:將2號從A移動到C
第三步:將1號從B移動到C
3、當(dāng)n=3時;
第一步:將1號從A移動到C
第二步:將2號從A移動到B
第三步:將1號從C移動到B
第四步:將3號從A移動到C
第五步:將1號從B移動到A
第六步:將2號從B移動到C
第七步:將1號從A移動到C
......
由上述可以看出,每次都會有將最大的一個從A移動到C的步驟。假如有n(n>1)個需要移動的盤子,我們可以將這些步驟分為3步:
1、將1到n-1的盤子通過C的輔助從A移動到B
2、將第n個盤子移動到C
3、將1到n-1de盤子通過A輔助從B移動到C
由此我們可以想到用遞歸的方法。
?
/*** @see [相關(guān)類/方法](可選)* @since [產(chǎn)品/模塊版本] (可選)*/
public class HanoiTower {public static void hanoi(int n, String a, String b,String c) {if (n == 1) {// 只有一個圓盤時直接從A石柱移動到C石柱move(n, a, c);} else {// 將前n-1個圓盤從石柱A移動到石柱Bhanoi(n - 1, a, c, b);// 將第n號圓盤從石柱A移動到石柱Cmove(n, a, c);// 將前n-1個圓盤從石柱B移動到石柱Chanoi(n - 1, b, a, c);}}public static void move(int n, String i, String j) {System.out.println("第" + n + "個圓盤," + "從" + i + "移動到" + j);}public static void main(String[] args) {hanoi(2,"A","B","C");}
}