递归汉诺塔
这个递归的例子已经见过好多次了,但是每次遇到的时候,或多或少都出过bug,现在来总结一下,以便后面会用到
#include <iostream>
using namespace std;
void hanoi(int n,char here, char temp, char there)
{
if(n == 1)
{
cout << 1 << "从"<<here<<"到"<<there << endl;
return ;
}
else
{
hanoi(n-1,here,there,temp);//把here上的n-1个盘子移动到temp临时柱子上,这样就可以把第n个盘子从here移动到there了
cout << n << "从"<<here<<"到"<<there << endl;
hanoi(n-1,temp,here,there);//然后再把temp柱子上的n-1个盘子移动到there上面,这样就结束了
}
}
int main()
{
hanoi(3,'a','b','c');//把三个盘子,从a柱子移动到c柱子上面
return 0;
}
因为是递归的过程,所以不必要理解每一步是怎么移动的,只需要知道,这一步到下一步是怎么移动的就好了