<c语言经典100例>c26:汉诺塔问题--递归

来源:互联网 发布:淘宝评论过的在哪里找 编辑:程序博客网 时间:2024/06/06 23:01
/* 【程序26】汉诺塔问题--递归算法* 题目:汉诺塔问题:有三根柱子A、B、C,有n个大小不一的圆盘,原始状态,所有圆盘都在A柱上(上面圆盘必须必下面圆盘小),现在要求,将所有圆盘移动到C上,一次只能移动一个,并且必须放在某一根之子上。找出移动次数最小的方案。* 程序分析:A->B->C */#include <stdio.h>    void func(int n, char from, char buf, char to);    int main(void)  {      int n;       char col[3] = {'A','B','C'};// 定义三根柱子            printf("请输入圆盘个数:\n");      scanf("%d", &n);// 输入有多少个盘            printf("最简移动方案:\n");            func(n, 'A', 'B', 'C');            return 0;  }    //用n个盘,原始盘全在from上,要移动到to上,中间工具用buf作过渡  void func(int n, char from, char buf, char to)  {      if (n == 1)      {          printf("%c--->%c\n", from, to);      }            else      {          func(n-1, from, to, buf); //A--->B柱          printf("%c--->%c\n", from, to);                    func(n-1, buf, from, to); //B--->C柱      }     }