当前位置:首页 > 高性能开发 > 数据结构与算法

递归4-汉诺塔有关问题

优良自学吧提供递归4-汉诺塔有关问题,递归4--汉诺塔问题递归4--汉诺塔问题 一、总结: 1、递归终止条件n==1的时候移动的是第一块盘子, if(n==1){//只需移动一个盘子

递归4--汉诺塔问题

递归4--汉诺塔问题

一、总结:

1、递归终止条件n==1的时候移动的是第一块盘子,

if(n==1){//只需移动一个盘子
cout<<src<<"->"<<dest<<" 移动的是第:"<<n<<" 块盘子"<<endl;//直接将盘子从src移动到dest即可
return ;
}
Hanoi2(n-1,src,dest,mid);//先将n-1个盘子从src移动到mid
cout<<src<<"->"<<dest<<" 移动的是第:"<<n<<" 块盘子"<<endl;//再将一个盘子从src移动到dest
Hanoi2(n-1,mid,src,dest);//先将n-1个盘子从mid移动到dest

2、最后三句话中间的那句话才是移动其它盘子

 

二、题目

递归4-汉诺塔有关问题

 

三、分析

n=3 时候的递归过程及移动路径分析

递归4-汉诺塔有关问题

递归4-汉诺塔有关问题

 

四、代码

 1 #include <iostream>
 2 using namespace std;
 3 void Hanoi(int n,char src,char mid,char dest)
 4 //将src座上的n个盘子,以mid为中转,移动到dest座 
 5 {
 6     if(n==1){//只需移动一个盘子 
 7         cout<<src<<"->"<<dest<<endl;//直接将盘子从src移动到dest即可
 8         return ; 
 9     } 
10     Hanoi(n-1,src,dest,mid);//先将n-1个盘子从src移动到mid
11     cout<<src<<"->"<<dest<<endl;//再将一个盘子从src移动到dest
12     Hanoi(n-1,mid,src,dest);//先将n-1个盘子从mid移动到dest 
13     
14     return ;
15 } 
16 
17 void Hanoi2(int n,char src,char mid,char dest)//输出移动的盘子号 
18 //将src座上的n个盘子,以mid为中转,移动到dest座 
19 {
20     if(n==1){//只需移动一个盘子 
21         cout<<src<<"->"<<dest<<" 移动的是第:"<<n<<" 块盘子"<<endl;//直接将盘子从src移动到dest即可
22         return ; 
23     } 
24     Hanoi2(n-1,src,dest,mid);//先将n-1个盘子从src移动到mid
25     cout<<src<<"->"<<dest<<" 移动的是第:"<<n<<" 块盘子"<<endl;//再将一个盘子从src移动到dest
26     Hanoi2(n-1,mid,src,dest);//先将n-1个盘子从mid移动到dest 
27     
28     return ;
29 } 
30 int main(){
31     //Hanoi(3,'a','b','c');//将3个盘子从a移动到c 
32     Hanoi2(3,'a','b','c');//将3个盘子从a移动到c 
33     return 0;
34 } 

 


(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢