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