汉诺塔问题看下谢谢
本帖最后由 卯乐 于 2018-4-21 21:31 编辑关于递归的else不太懂
#include<stdio.h>
void move(char a,char b)
{
printf("%c->%c\n",a,b);
}
void han(int n,char a,char b,char c)
{
if(n>0)
{
han(n-1,a,c,b);
move(a,b);
han(n-1,c,b,a);
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",(1<<n)-1);
han(n,'A','B','C');
return 0;
} 汉诺塔一共分为三个步骤,第一步把n-1的盘子借助C放到B,第二部把A挪到C,第三部把B上面的N-1个盘子借助A挪到C。仔细看递归调时ABC的位置,你会发现和汉诺塔的三个步骤时一样的。这个问题感觉说不清楚,只能靠个人理解,我刚开始学到这里的时候也没听明白老师怎么讲的。后来感觉理解的多一些了,主要还是要理解递归的思想。比如只有五个盘子,第一步你要借助C把四个盘子挪到B。而这第一步你也可以分解成三步,第一步把三个盘子借助B挪到C,然后这还能分解成三步。。。有一个规律是如果盘子是奇数的,则第一个盘子先挪到C,如果是偶数第一个盘子则先挪到B。 这个汉字思想我明白就是代码的话有点不懂。 洛臻 发表于 2018-4-21 21:45
汉诺塔一共分为三个步骤,第一步把n-1的盘子借助C放到B,第二部把A挪到C,第三部把B上面的N-1个盘子借助A挪 ...
这个汉字思想我明白就是代码的话有点不懂。 卯乐 发表于 2018-4-21 22:04
这个汉字思想我明白就是代码的话有点不懂。
单步调试调试你就明白了,看看与你设想的一不一样,不一样的琢磨琢磨为什么,慢慢的就好了,这需要时间,刚学到这个我也不懂,后来慢慢的不知道怎么的理解就越来越深了。 嗯,知道了。不过没电脑,想买个2000以下二手的笔记本,又怕用不了
页:
[1]