1、题目解析
经典汉诺塔问题。
2、算法解析
1、如何来解决汉诺塔问题
2、为什么可以用递归
大问题->相同类型的子问题
子问题->相同类型的子问题
3、如何编写递归代码
1、重复子问题->函数头
将X柱子上的一堆盘子借助Y柱子转移到Z柱子上。
2、只关心一个子问题在干什么 -> 函数体
3、递归出口
3、编写代码
class Solution {
public:
void hanota(vector<int>& A, vector<int>& B, vector<int>& C)
{
int n = A.size();
dfs(A, B, C, n);
}
void dfs(vector<int>& A, vector<int>& B, vector<int>& C, int n)
{
if(n == 1)
{
C.push_back(A[A.size()-1]);
A.pop_back();
return ;
}
dfs(A, C, B, n-1);
C.push_back(A.back());
A.pop_back();
dfs(B, A, C, n-1);
}
};