• 递归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 } 
  • 相关阅读:
    C#学习三之几个关键字Static,ref&out,get&set,readonly
    C#学习二之浅析var类型和enum枚举类型
    C#学习一之HelloWorld
    泛型(二)
    泛型(一)
    JavaScript 使用
    JavaScript
    C# 自定义控件制作和使用实例(winform)
    ThinkPHP 参数绑定原理
    处理jQuery append加入的元素 绑定事件无效的方法
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/6949515.html
Copyright © 2020-2023  润新知