2 shadowcw shadowcw 于 2016.03.06 08:20 提问

汉诺塔可以用递归吗 不找规律的话

汉诺塔可以用递归吗 不找规律的话 求大神指点 递归应该怎么用才能解决汉诺塔 谢谢了

4个回答

caozhy
caozhy   Ds   Rxr 2016.03.06 08:22

汉诺塔本来就应该用递归,不用递归反倒麻烦,需要用堆栈模拟。
http://blog.csdn.net/kkkkkxiaofei/article/details/8333644

caozhy
caozhy 回复东风玖哥: 递归和对象有什么关系?递归是函数自身调用自身
接近 2 年之前 回复
dongfeng9ge
dongfeng9ge C语言连对象都没有,怎么递归呀?
接近 2 年之前 回复
shadowcw
shadowcw 回复caozhy: 谢谢
接近 2 年之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.03.07 16:42
 #include<stdio.h>

void move(int n,char a,char b,char c)
{
    if(n==1)
        printf("\t%c->%c\n",a,c);    //当n只有1个的时候直接从a移动到c
    else
    {
        move(n-1,a,c,b);            //第n-1个要从a通过c移动到b
        printf("\t%c->%c\n",a,c);
        move(n-1,b,a,c);            //n-1个移动过来之后b变开始盘,b通过a移动到c,这边很难理解
    }
}

main()
{
    int n;
    printf("请输入要移动的块数:");
    scanf("%d",&n);
    move(n,'a','b','c');
}
shadowcw
shadowcw 回复lx624909677: 谢谢大神
接近 2 年之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.03.07 16:43

```#include
#include

using namespace std;

void hannoi (int n, char A, char B, char C)  // 把A盘里面的圆圈转移到C盘里面【A--C】。
{
if (n == 1)
{
cout << "移动圆圈" << n << "从盘" << A << "盘" << C << endl;  //把最后一个圆环从起点盘移动到目标盘。
}
else
{
hannoi (n-1, A, C, B);  // 把N-1个圆环从起点盘移动到(当前)没有任何圆环的过度盘;通过B、C盘在此函数调用中调用位置的互换,来实现把N-1个圆环从A盘到B盘的转移【A--B】。
cout << "移动圆圈" << n << "从盘" << A << "盘" << C << endl;
hannoi (n-1, B, A, C);  // 把N-1个圆环从国度盘移动到目标盘(模仿1和2的操作方法来实现);通过A、B盘在此函数调用中位置的互换,来实现N-1个圆环从B盘到C盘的转移【B--C】。
}
}

int main()
{
int n;
cin >> n;

hannoi (n, 'a', 'b', 'c');

system("pause");
return 0;

}


shadowcw
shadowcw 回复lx624909677: 谢谢大神
接近 2 年之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.07 13:41

C语言实现汉诺塔比C++实现难

shadowcw
shadowcw 回复东风玖哥: c++有这样的算法吗?求指导
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!