汉诺塔的问题,也是一个经典的递归算法问题。
下面是自己总结的一张整体流程图。
下面是代码,代码虽简单,但理解其内部运行原理很重要。
//======================================================================
//
// Copyright (C) 2014-2015 SCOTT
// All rights reserved
//
// filename: HanNuoTa.c
// description: a demo to display HanNuoTa
//
// created by SCOTT at 02/10/2015
// http://blog.youkuaiyun.com/scottly1
//
//======================================================================
#include <stdio.h>
void HanNuoTa(int n, char a, char b, char c)
{
if( n < 1 )
return ;
HanNuoTa(n-1, a, c, b);
printf("把第%d盘子通过%c移到%c\n", n, a, c);
HanNuoTa(n-1, b, a, c);
}
int main()
{
int num;
printf("Input The Num you want to create:");
scanf("%d", &num);
HanNuoTa(num, 'A', 'B', 'C');
return 0;
}
运行结果:
如果对电脑的算法有怀疑,大家可以自己动手算算,看看它的方法是不是最优的。
原创文章,转载请著名出处:http://blog.youkuaiyun.com/scottly1/article/details/43705291