zoukankan      html  css  js  c++  java
  • 递归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、最后三句话中间的那句话才是移动其它盘子

    二、题目

    三、分析

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

    四、代码

     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 } 
  • 相关阅读:
    【AGC016E】Poor Turkeys
    【51nod 1597】有限背包计数问题
    RPA应用场景-营业收入核对
    RPA应用场景-报税机器人
    UiPath保存图片操作的介绍和使用
    UiPath图片操作截图的介绍和使用
    UiPath存在图像Image Exists的介绍和使用
    UiPath存在元素Element Exists的介绍和使用
    UiPath存在文本Text Exists的介绍和使用
    UiPath文本操作Get Visible Text的介绍和使用
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/6949515.html
Copyright © 2011-2022 走看看