时间:2024-03-24 22:36:02 浏览:946
汉诺塔效果c言语:C言语汉诺塔(高分提问)
1、hanio(n-1,a,c,b);(提问:为什么参数设置为a,c,b)
2、hanio(n-1,b,a,c);(提问:而这个又设置成为b,a,c)
3、其实假设清楚了移动规则,这个就很复杂了.
4、假定有n个盘子,我们也可以看作两个盘子,其中最下面的一个为x,下面的n-1个为y,那么这两个盘子的以后就和下面一样
5、而那n-1个盘子也可以用异样方法处置.这样我们像有了一个公式:
6、这样就完成了移动,假设明白了这个,那么前面的就好懂了,
7、hanio(n-1,a,c,b);//由于hanio函数实践移动的是char a,char c,也就是第二和第四个参数,所以这儿可以看成把n-1个盘子从a移动到b;
8、hanio(n-1,b,a,c);//这儿可以看成把n-1个盘子从a移动到b;
关于汉诺塔这个东西是相当的笼统,我事先学习的时分看了好几个版本的教程,也没有搞懂,最后还是自己重复的了解,顿悟了,
所以我这里把事先我作为初学者的想法写给你,但是最重要的还得靠你自己的了解:
1、关于void hanoi(int n,char one,char two,char three);这个函数,表示
将n个盘子从one经过two移动到three
我事先是这么想的:先不论hanoi函数外部发什么啥,只需这么的执行一次,一定的,就有n个盘子曾经成功移动到three啦
2、了解了下面的含义后,我是这么想的:
要将5个盘子从A移动到C(经过B),就得先从A将4个移动到B(经过C),一个从A到C,再从B移动4个到C(经过A),搞定
所以说hanoi(5,'A','B','C');外面其实分为三步:
1)hanoi(4,'A','C','B');
3)hanoi(4,'B','A','C');
就是这样的三步,至于1)这部嘛,反正我坚信:只需执行了这句函数,不论进程,最终A会移动到C4个的
3、然后是最后一点,关于hanoi这个函数,是指将将n个盘子从one经过two移动到three,所以函数外部这么写:
printf('%c->%c',one,three);
} 代码和你给的略有不同,你的代码将printf专门又用了一个函数来完成,原理是一样的 代码和你给的略有不同,你的代码将printf专门又用了一个函数来完成,原理是一样的 能够是由于你真好学习到函数的相关,所以这个教程故意想弄得复杂点。。。 这里还应该有一个判别语句,if(n==1),也就是只要1块需求移动,也就不需求这么费事的三步了,直接移动就好了,所以最终的代码: printf('%c->%c',one,three); printf('%c->%c',one,three); } ============================================= ============================================= 以上就是我的回答,希望对你有协助 汉诺塔这东西主要需求的还是自己的重复了解,想通了就复杂啦~ 假设还有什么疑问欢迎随时向我追问 标签: