您的位置:首页 > 编程语言 > C语言/C++

汉诺塔问题(Towers of Hanoi)

2017-09-15 14:48 211 查看
汉诺塔问题的思维方式很重要,正向和逆向都很容易绕晕,要从中间开始展开



显而易见,如图所示的情况是移动过程中必须的一步,而问题就可以分解为前半部分:如何将
k-1
个盘子从
A->B
及后半部分:如何将
k-1
个盘子从
B->C
,这两个问题本质上又是一样的。根据归纳法,
k
个盘子的移动可以通过
k-1
个盘子的移动解决,故使用递归算法。

void hanoi(int n, char A, char B, char C) {
if(n == 1)
//递归到n = 1时终止
printf("Move sheet %d from %c to %c\n", n, A, C);
else {
hanoi(n-1, A, C, B);    //前半部分
printf("Move sheet %d from %c to %c\n", n, A, C);
hanoi(n-1, B, A, C);    //后半部分
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归算法 c语言