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;
}
相關文章
- 遞迴實現漢諾塔問題遞迴
- hanoi漢諾塔C++實現C++
- 經典遞迴解決漢諾塔!遞迴
- 漢諾塔非遞迴演算法遞迴演算法
- 漢諾塔非遞迴棧程式碼遞迴
- 漢諾塔的圖解遞迴演算法圖解遞迴演算法
- 漢諾塔的實現
- 從漢諾塔遊戲理解python遞迴函式遊戲Python遞迴函式
- python3:遞迴解漢諾塔問題Python遞迴
- C#中漢諾塔問題的遞迴解法C#遞迴
- 化繁為簡 經典的漢諾塔遞迴問題 in Java遞迴Java
- 百練OJ:4147:漢諾塔問題(Hanoi)——python實現漢諾塔Python
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- PHP實現漢諾塔演算法PHP演算法
- Python實現:漢諾塔問題Python
- 漢諾塔(hanoi) C語言實現C語言
- 【YbtOJ高效進階 遞推-2】奇怪漢諾塔
- python中的迭代與遞迴Python遞迴
- SQL 漢諾塔SQL
- 遞迴與迭代的聯絡以及優缺點(以c++為例)遞迴C++
- 漢諾塔詳解
- 漢諾塔-PythonPython
- ACM 漢諾塔(三)ACM
- Python實現連結串列反轉的方法【迭代法與遞迴法】Python遞迴
- 實現反轉連結串列--遞迴、迭代、雙指標、棧遞迴指標
- 漢諾塔通項公式公式
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺Java遞迴SpringGCCloud分散式微服務架構
- 小知識系列(3):Hanoi塔(漢諾塔,河內塔)
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 遞迴實現原則遞迴
- strcmp的遞迴實現遞迴
- 二十一、氣泡排序演算法——JAVA實現(遞迴與非遞迴)排序演算法Java遞迴
- [java] 二叉樹的後序遍歷(遞迴與非遞迴實現)Java二叉樹遞迴
- 二叉樹的前序、中序、後序的遞迴和迭代實現二叉樹遞迴
- 漢諾塔遊戲《演算法很美》遊戲演算法
- 漢諾塔演算法演示1.0演算法
- 兩種遞迴方式實現迴文字遞迴