数据结构 汉诺塔 c swift 版本

  • 汉诺塔 题的意思 http://www.360doc.com/content/12/0727/11/219024_226737868.shtml x, y , z代表三个柱子。 要把n个块i移动到 z上。

  • swift 版本

                   ///x借助y移动到z
                  func move(n:Int,x:String,y:String,z:String){
                      // 当n等一,就代表最后一个
                      if n == 1 {
                         print("\(x)->\(z)")
                      }else{
                          ///x 借助 z 移动到y
                          move(n-1, x: x, y: z, z: y)
                          ///x当前的最后一个  移动到z
                          print("\(x)->\(z)")
                          ///然后把剩下的 y借助 x 移动到 z
                          move(n-1, x: y, y: x, z: z)
                      }
                    }
    
                      move(3, x: "x", y: "y", z: "z")
    复制代码
  • c++版本

                  ///x借助 y 移动到 z
                  void move(int n,char x, char y,char z){
                      ///如果n等一1, 就直接把 x 移动到z上面
                      if (1 == n){
                          std::cout<<x<<"->"<<z<<std::endl;
                      }else{
                          ///没有等于1.
                          ///第一步先 把x上的借助z 移动到 y上
                          move(n-1, x, z, y);
                          ///现在都已经移动到 y上
                          //然后移动第n个
                          std::cout<<x<<"->"<<z<<std::endl;
                          ///然后 再把 y上借助x移动到z
                          move(n-1, y, x, z);
                          /// 完成全部移动
                      }
                  }
    
                  int main() {
                      
                      int n = 0;
                      
                      std::cin>>n;
                      
                      move(n, 'x', 'y', 'z');
                      
                      return 0;
                  }
    复制代码

个人博客: www.liangtongzhuo.com

转载于:https://juejin.im/post/5a31f13d51882527541054b7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值