摘要:漢諾塔問題有三根柱子,源桿,暫存桿,目的桿上有層盤子,由小到大向下排列,現(xiàn)需要將桿的盤子移到桿中要求大的盤在下面,小的盤在上面一次只能移動一個盤子個人思路先分析問題,用數(shù)學(xué)的歸納法當(dāng)只有一個盤時,直接移動當(dāng)有兩個盤時,先將小的移到暫存桿,再
漢諾塔問題:
有三根柱子,源桿A,暫存桿temp,目的桿C A上有n層盤子,由小到大向下排列,現(xiàn)需要將A桿的盤子移到C桿中
要求:1)大的盤在下面,小的盤在上面 2)一次只能移動一個盤子 個人思路:先分析問題,用數(shù)學(xué)的歸納法 當(dāng)只有一個盤時,直接移動; 當(dāng)有兩個盤時,先將小的移到暫存桿,再將大的移到目的桿C,最后將暫存桿temp的小盤移到目的桿C中; 當(dāng)有三個盤時,在下面的代碼中的注釋中寫有詳細(xì)步驟 ...... n個盤時,把它看做兩部分一是上面的(n-1)盤,二是第n個盤,先將(n-1)首先將上面的(n-1)個盤子從A桿借助C桿移至temp桿,其次剩下第n個盤,直接放至C桿,最后一次遞歸調(diào)用解決即可。 其中漢諾塔層數(shù)可以由程序內(nèi)存儲讀取或者鍵盤輸入,c為程序計數(shù)器,計算移動盤的次數(shù)
import java.util.Scanner; public class Hanoi { int c=0;//計數(shù)器,計算移動的次數(shù) public void moveone(int n, String A, String C) { System.out.println("move " + n + " from " + A + " to " + C); } public void movesome(int n, String A, String temp, String C) { c++; if (n <= 0) { System.out.println("number error"); return; } else if (n == 1) { moveone(n, A, C); } else { movesome(n - 1, A, C, temp); // 首先將上面的(n-1)個盤子從A桿借助C桿移至temp桿 moveone(n, A, C); // 然后將編號為n的盤子從A桿移至C桿 movesome(n - 1, temp, A, C); // 將剩下的(n-1)個盤子從temp桿借助A桿移至C桿 } //草稿紙上手寫漢諾塔三層的實現(xiàn) // moveone(1,A,C); // moveone(2,A,temp); // moveone(1,C,temp); // moveone(3, A, C); // moveone(1, temp, A); // moveone(2, temp, C); // moveone(1, A, C); } public static void main(String[] args) { //層數(shù) System.out.println("請輸入漢諾塔層數(shù):"); Scanner input =new Scanner(System.in); int in=input.nextInt(); int l = 3; Hanoi h = new Hanoi(); // h.moveone(l,A,C);//程序內(nèi)存儲讀取 h.movesome(in, "初始位置", "臨時存放地", "目的地址"); System.out.println("漢諾塔的實現(xiàn)需要的移動次數(shù):"+h.c); // h.movesome(l, "初始位置", "臨時存放地", "目的地址"); } }
程序運(yùn)行結(jié)果:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73732.html
摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)硪粋€經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時候,只需要把最大的那個盤,從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動它。 學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)硪粋€經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門小題目之一吧~ 視頻教程 什么是漢諾塔? 我這里直接拉來一個圖解釋一下(掛了請聯(lián)系我)sho...
摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)硪粋€經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時候,只需要把最大的那個盤,從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動它。 學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)硪粋€經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門小題目之一吧~ 視頻教程 什么是漢諾塔? 我這里直接拉來一個圖解釋一下(掛了請聯(lián)系我)sho...
摘要:那么,有了循環(huán),為什么還要用遞歸呢在某些情況下費(fèi)波納切數(shù)列,漢諾塔,使用遞歸會比循環(huán)簡單很多很多話說多了也無益,讓我們來感受一下遞歸吧。 遞歸介紹 本來預(yù)算此章節(jié)是繼續(xù)寫快速排序的,然而編寫快速排序往往是遞歸來寫的,并且遞歸可能不是那么好理解,于是就有了這篇文章。 在上面提到了遞歸這么一個詞,遞歸在程序語言中簡單的理解是:方法自己調(diào)用自己 遞歸其實和循環(huán)是非常像的,循環(huán)都可以改寫成遞歸...
摘要:前言相信大家在面試或者工作中偶爾會遇到遞歸算法的提問或者編程,我們今天來聊一聊從數(shù)學(xué)歸納法到理解遞歸算法。這種廣義的數(shù)學(xué)歸納法應(yīng)用于數(shù)學(xué)邏輯和計算機(jī)科學(xué)領(lǐng)域,稱作結(jié)構(gòu)歸納法。 showImg(https://img-blog.csdnimg.cn/20190426221838971.gif);showImg(https://img-blog.csdnimg.cn/20190429222...
閱讀 2624·2021-11-18 10:07
閱讀 1083·2021-08-03 14:04
閱讀 726·2019-08-30 13:08
閱讀 2579·2019-08-29 15:33
閱讀 1087·2019-08-29 14:07
閱讀 2985·2019-08-29 14:04
閱讀 1435·2019-08-29 11:19
閱讀 1144·2019-08-29 10:59