zoukankan      html  css  js  c++  java
  • 汉诺塔递归实现

      经典问题汉诺塔的实现中,递归实现可以说是代码量最少,并最简单易懂的实现方法了。

      假设有三根柱子a,b,c。其中a柱子上有n个金片。我们的目的就是把n个金片借助b,全部移动到c上。这是一个汉诺塔问题。

      这个问题可以分解成如下子问题:

      (1)将n-1个金片从a移动到b。这又是一个汉诺塔问题。

      (2)上面执行完之后,可以直接将第n个金片移动到c。

      (3)上面两步执行完之后,将n-1个金片从b移动到c。这又再次是一个汉诺塔问题。

      很显然,把上面的步骤翻译成递归形式可以得到如下的程序:

     1 #include <iostream>
     2 using namespace std;
     3 void Move(int n,char src,char dst){
     4     cout<<"move "<<n<<" from "<< src<<" to "<<dst<<endl;
     5 }
     6 void Hannoi(int n,char a,char b,char c){//函数的含义:将n个金片从a借助b移动到c上
     7     if(n==1){
     8         Move(1,a,c); 
     9     }
    10     else{
    11         Hannoi(n-1,a,c,b);
    12         Move(n,a,c);
    13         Hannoi(n-1,b,a,c);
    14     }
    15 }
    16 int main()
    17 {
    18     int n;
    19     while(cin>>n){
    20         Hannoi(n,'a','b','c');
    21     }
    22     return 0;
    23 } 
  • 相关阅读:
    C语言I博客作业08
    博客作业6
    C语言I博客作业05
    C语言I博客作业03
    5.C#2.0之不完整类型(完成)
    4.C#2.0之迭代器(完成)
    3.C#2.0之匿名方法(完成)
    2.C#2.0之泛型(完成)
    1.C#2.0之2.0简介(完成)
    18.C#基础之不安全代码(完成)
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/4965147.html
Copyright © 2011-2022 走看看