zoukankan      html  css  js  c++  java
  • C语言:使用递归解决汉诺塔问题。

    //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 //汉诺塔使用递归可以很轻松但有点抽象的解决。
     4 //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
     5 void fun(int m,char A,char B,char C)//把A柱上的圆盘移动到B柱
     6 {
     7     if (m == 1) printf("第%d个圆盘从%c柱子移到%c柱子
    ", m, A, B);//如果本来只有一个圆盘的话,从A移到B,就直接移动。//注意输出字符串用%c,
     8     else//如果是两个圆盘,则先把第一个放到C柱,再把第二个放到B柱,再把第一个放到B柱。
     9     {
    10         fun(m - 1, A, C, B);//形参B的位置赋值了C,所以这句输出的是C。
    11         printf("第%d个圆盘从%c柱子移到%c柱子
    ", m, A, B);
    12         fun(m - 1, C, B, A);//输出从C移到B。
    13     }
    14 }
    15 void main()
    16 {
    17     int m;
    18     char A = 'A', B = 'B', C = 'C';
    19     printf("请输入汉诺塔的层数:");
    20     scanf("%d",&m);//注意scanf函数的格式。
    21     fun(m,A,B,C);
    22 }
  • 相关阅读:
    Sqlserver 还原那些事
    Sqlserver CheckPoint 在三种恢复模式中的不同表现
    转 SQL Server中关于的checkpoint使用说明
    类继承中的 隐藏和重写的 区别
    转 关于C#中派生类调用基类构造函数的理解
    Sqlserver 笔记 持续更新
    Asp.net 执行回调操作后 无法更新ViewState的问题
    c# double decimal
    table用模板生成的问题
    MVC接收列表参数
  • 原文地址:https://www.cnblogs.com/ming-4/p/10511264.html
Copyright © 2011-2022 走看看