先上完整的代码,复制过去直接编译运行即可输出结果。
#include <iostream> using namespace std; void move( int count , char start , char finish , char temp) { if( count == 0 ) return; move ( count-1, start, temp, finish); cout << "把"<< count << "号碟子从" << start << "柱移动到" << finish << "柱" << endl; move ( count-1, temp, finish, start); } int main() { move (3,'A','C','B'); cout << "完成移动!" << endl; }现在讲讲递归函数void move( int count , char start , char finish , char temp)
这个函数有四个参数,分别是: count:移动的碟子的个数 start:起始柱子 finish:目标柱子 temp:用来辅助的柱子
·递归结束条件:
if( count == 0 ) return;//意思是如果柱子上没有碟子了,那么递归结束。·核心代码,一共3行,每一行都代表一个动作。
move ( count-1, start, temp, finish); cout << "把"<< count << "号碟子从" << start << "柱移动到" << finish << "柱" << endl; move ( count-1, temp, finish, start);在这里,我们将碟子的移动分为三部分,对应的就写出了3行代码。
我们先从宏观上考虑,如果我们要把100个碟子从A移动到C,那么可以分成3步
1.先把99个碟子从A移动到B 2.然后把最后一个碟子从A移动到C 3.最后,我们把那99个碟子从B移动到C
这看起来就像是把大象塞进冰箱一样简单。
对应到我们刚才写下的3行代码,第一行就是刚才的第一步,第二行是第二步,第三行是第三步。
比如最开始的代码中的第12行,将3个碟子从A移动到C,B是辅助柱子
move( 3 , 'A' , 'C' , 'B' );