递归:
把一个大型问题转换为一个小问题,在相同的规律下层层向下拆解,直至子问题不需要进一步递归就能解决的程度。(递归不需要懂电脑具体怎么给你算出来的—>玄学问题。懂思路和方法就好)
条件:
1.递归表达式(规律)
2.递归出口(终止递归的条件)
可以用递归思考的问题特征:(一般可以用递归解决的问题用循环也可以)
1.问题与子问题之间具有递推关系;
2.具有递归性质的数据结构:链表,树,图……
3.反向性问题
递归简单例题:也可用循环解决(zzc 种田;正整数序列)
经典递归题:汉诺塔问题(c++写需要高精度优化):—> 这个日后单独写一章关于高精度算法的。
hanoi的基本思路:不要考虑多次具体如何调动—> 直接以n个整体,(n-1)及最下面的1个来分析—>递归内涵不考虑具体过程,直接按思路走—>将A上面n-1个圆盘通过C移向B,将A最后一个移向C,再将B上n-1个通过A移C。
代码:(递归基础思路)
#include
using namespace std;
int t = 0;
void movee(char a,char c)
{
t++;
}
void hanoi(int n,char a,char b,char c)
{
if(n == 1)
{
movee(a,c);//运行到这一步时程序自动调回
}
else
{
hanoi(n-1,a,c,b);
movee(a,c);
hanoi(n-1,b,a,c);
}
}
int main(){
int n;
cin >> n;
hanoi(n,’a’,’b’,’c’);
cout << t;
return 0;
}
