汉诺塔问题(递归求解)

来源:互联网 发布:高校教学软件 编辑:程序博客网 时间:2024/05/23 21:51

递归求解,当1阶时,直接将a移到c,当2阶时,将a柱子n-1个圆盘移动到b柱子,然后将a剩下的一个圆盘移动到c,接着再把b上暂时放着的n-1个圆盘移动到c

f(n) = f(n-1) + f(n-2);

如图




代码如下

#include<stdio.h>int i = 1;void move(int n, char a, char b){  printf("%d:%c to %c\n", i++, a, b);}void hanoit(int n, char a, char b, char c){  if (n == 1) {    move(1, a, c);  } else {    hanoit(n-1, a, c, b);    move(n, a, c);    hanoit(n-1, b, a, c);  }}int main(void){  int n;  char a = 'A', b = 'B', c = 'C';  while (scanf("%d", &n) != EOF) {    hanoit(n, a, b, c);  }  return 0;}