二进制与汉诺塔
啊啊啊。小白第一次写还有点儿紧张。。。算是给自己的小记录吧。
看了b站视频,从二进制角度解决递归问题(汉诺塔问题):https://www.bilibili.com/video/BV1rs411Y76X
小想法:递归问题可利用二进制算法解决;而对于任意进制的算法定义是递归的。进位算法和递归的本质上是相似的,由一个大问题以及该大问题下延伸细分出的诸多小问题组成,要解决该大问题,首先就要解决子问题,要解决该子问题,首先就要解决子问题下更小的子问题,这样的思想一直循环直至达到问题的最小单元(可以直接解决),然后就可以反向从小到大解决掉各种子问题,直至顶层的大问题,over。
递归汉诺塔:
void move(int n, char a, char b, char c) { if (n == 1)//只有一个最小圆盘(子问题的最小单元) { cout << a << "->" << c << endl; } else { //将n-1个圆盘从a->b移动(子问题) move(n - 1, a, c, b); //将未在a上的最小圆盘(比b的最大圆盘大的最小圆盘)从a->c移动 //相当于进位 cout << a << "->" << c << endl; //将n-1个圆盘从b->c移动(子问题) move(n - 1, b, a, c); } }

浙公网安备 33010602011771号