• 递归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 } 
  • 相关阅读:
    .Net创建Windows服务完成批量导出功能(错误速查)
    WIN7 64位对Excel操作异常
    登陆优化的经验
    SQL 使用触发器常见错误
    CSS样式表优化
    JavaScript getMonth() 方法
    MVC架构 -- 初学试水<选课管理系统>
    触摸不到的天空
    嵌套 QQ、微博 通讯工具到HTML中
    CSS 实现样式下拉菜单
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/6949515.html
Copyright © 2020-2023  润新知