小編給大家分享一下C++如何實(shí)現(xiàn)漢諾塔,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了平度免費(fèi)建站歡迎大家使用!
C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解
前言:
有A,B,C三塔,N個盤(從小到大編號為1-N)起初都在A塔,現(xiàn)要將N個盤全部移動到C塔(按照河內(nèi)塔規(guī)則),求最少移動次數(shù)以及每次的移動詳細(xì)情況。
要求:
需要采用遞歸方法和消除尾遞歸兩種方法編寫。
盤數(shù)N由用戶從標(biāo)準(zhǔn)輸入讀入,以一個整數(shù)表示,然后請調(diào)用兩個方法按照下面例子所述分別在屏幕中輸出結(jié)果(正常情況下一個輸入數(shù)據(jù)會顯示同樣的輸出結(jié)果2次)。
實(shí)現(xiàn)代碼:
#include<iostream>
using namespace std;
void move(int count,char start='a',char finish='b',char temp='c')
{
if(count>0)
{
move(count-1,start,temp,finish);
cout<<"Move "<<count<<" from "<<start<<" to "<<finish<<endl;
move(count-1,temp,finish,start);
}
}
void move_without_recursion(int count,char start='a',char finish='b',char temp='c')
{
char swap;
while(count>0)
{
move_without_recursion(count-1,start,temp,finish);
cout<<"Move "<<count<<" from "<<start<<" to "<<finish<<endl;
count--;
swap=start;
start=temp;
temp=swap;
}
}
int main()
{
int count;
cout<<"please enter the number:";
cin>>count;
cout<<"遞歸方法運(yùn)行過程:"<<endl;
move(count);
cout<<"消除尾遞歸方法運(yùn)行過程:"<<endl;
move_without_recursion(count);
return 0;
}以上是“C++如何實(shí)現(xiàn)漢諾塔”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前名稱:C++如何實(shí)現(xiàn)漢諾塔
轉(zhuǎn)載注明:http://chinadenli.net/article12/gdjogc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、自適應(yīng)網(wǎng)站、定制開發(fā)、面包屑導(dǎo)航、網(wǎng)站收錄、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)