c++遞迴與迭代實現漢諾塔
遞迴實現:把n個盤子從柱一移到柱三,以柱二為中轉的過程:
1.把n-1個盤子從柱一移到柱二,以柱三為中轉。
2.把一個盤子從柱一移到柱三
3.把n-1個盤子從柱二移到柱三,以柱一為中轉。
假設是三個變數start,end,temp,從start把n個盤子移到end,以temp為中轉,即
void move(int n,int start ,int end,int temp)
{
if(n==1)
{
cout<<start<<"->"<<end<<endl;
}else
{
move(n-1,start,temp,end);
cout<<start<<"->"<<end<<endl;
move(n-1,temp,end,start);
}
}
完整程式碼與測試:
#include<iostream>
using namespace std;
void move(int n,int start ,int end,int temp)
{
if(n==1)
{
cout<<start<<"->"<<end<<endl;
}else
{
move(n-1,start,temp,end);
cout<<start<<"->"<<end<<endl;
move(n-1,temp,end,start);
}
}
void main()
{
move(2,1,3,2);
}
+-
迭代演算法:任何遞迴都能轉化為迭代,只要定義一個棧。
#include<iostream>
#include<time.h>
using namespace std;
typedef struct //stack definition
{
int n;
int start;
int temp;
int end;
}hanuo;
hanuo han[10000];
int index=0;
void push(hanuo a)
{
han[index]=a;
index++;
}
hanuo pop()
{
hanuo temp=han[index-1];
index--;
return temp;
}
void move(int n,int x,int y,int z)
{
hanuo first;
first.n=n;
first.start=x;
first.temp=y;
first.end=z;
push(first);
while(index!=0)
{
hanuo abc=pop();
int num=abc.n;
int start=abc.start;
int temp=abc.temp;
int end=abc.end;
if(num==1)
{
cout<<start<<"->"<<end<<endl;
}
else
{
hanuo temp1;
temp1.n=num-1;
temp1.start=start;
temp1.temp=end;
temp1.end=temp;
push(temp1);
cout<<start<<"->"<<end<<endl;
temp1.n=num-1;
temp1.start=temp;
temp1.temp=start;
temp1.end=end;
push(temp1);
}
}
}
void main()
{
long int time1,time2;
time1=clock();
move(10,1,2,3);
time2=clock();
double time=(double)(time2-time1)/1000;
cout<<"spend "<<time<<endl;
}
相關文章
- 遞迴-*漢諾塔遞迴
- 漢諾塔和遞迴遞迴
- 課時24:遞迴:漢諾塔遞迴
- 遞迴求解漢諾塔問題遞迴
- 漢諾塔的圖解遞迴演算法圖解遞迴演算法
- python3:遞迴解漢諾塔問題Python遞迴
- 從漢諾塔遊戲理解python遞迴函式遊戲Python遞迴函式
- Python實現:漢諾塔問題Python
- PHP實現漢諾塔演算法PHP演算法
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- SQL 漢諾塔SQL
- 漢諾塔-PythonPython
- 【YbtOJ高效進階 遞推-2】奇怪漢諾塔
- 全排列的實現之遞迴版與迭代版遞迴
- 漢諾塔詳解
- 迭代與遞迴--你被遞迴搞暈過嗎?遞迴
- 奇怪的漢諾塔 - 題解
- JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺Java遞迴SpringGCCloud分散式微服務架構
- 小知識系列(3):Hanoi塔(漢諾塔,河內塔)
- 遞迴與迭代的聯絡以及優缺點(以c++為例)遞迴C++
- Python實現連結串列反轉的方法【迭代法與遞迴法】Python遞迴
- 漢諾塔遊戲《演算法很美》遊戲演算法
- 實現反轉連結串列--遞迴、迭代、雙指標、棧遞迴指標
- 迭代器,閉包,遞迴遞迴
- 漢羅塔問題 java實現Java
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- 棧實現遞迴遞迴
- lambda實現遞迴遞迴
- 手把手教你用java實現資料結構(五)-----查詢(二分法),遞迴(斐波那契數列,漢諾塔)演算法Java資料結構遞迴演算法
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 遞迴實現原則遞迴
- 二十一、氣泡排序演算法——JAVA實現(遞迴與非遞迴)排序演算法Java遞迴
- 二叉樹的前序、中序、後序的遞迴和迭代實現二叉樹遞迴
- C++物件導向程式設計——遞迴實現字串的反序C++物件程式設計遞迴字串
- 漢諾塔與二進位制、滿二叉樹的千絲萬縷二叉樹
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- Java不用遞迴的迭代快速排序示例Java遞迴排序
- C++標準模板庫(STL)迭代器的原理與實現C++
- 【C++】翻轉二叉樹(遞迴、非遞迴)C++二叉樹遞迴