A7976.汉诺塔 题解
2024-12-15 19:46:42
发布于:江苏
7阅读
0回复
0点赞
这题也是非常简单,题目上已经标注出了知识点——递归。
递归就是一个函数在它的函数体内调用它自身,执行递归函数将反复调用其自身,每调用一次就进入新的一层,而且它必须有结束的条件。
听着很复杂,但理解了就很简单了。
这是递归函数的特点
1. 每一级函数调用时都有自己的变量,但是函数代码并不会得到复制,如计算5的阶乘时每递推一次变量都不同;
2. 每次调用都会有一次返回,如计算5的阶乘时每递推一次都返回进行下一次;
3. 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
4. 递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
5. 递归函数中必须有终止语句。
循环能干的事,递归都能干;递归能干的循环不一定能干
一句话总结递归:自我调用且有完成状态。
说了这么多,我们上代码。(注释看程序里的)
#include<bits/stdc++.h>
using namespace std;
void f(int n,char st,char end,char mid){
if(n==0){
return ;//没有盘子就结束返回
}
f(n-1,st,mid,end);//先把第n-1个盘子移动到mid盘,借助end盘
cout<<st<<" --"<<n<<"--> "<<end<<endl;//将第n个盘子移到end盘
f(n-1,mid,end,st);//再将n-1个盘子移到end盘,借助st盘
}
int main() {
long long n;
cin>>n;
f(n,'A','C','B');
return 0;
}
这就是本题的题解,有点过于EASY了。
这里空空如也
有帮助,赞一个