递归思想:直接或间接的调用自身。算法简洁易懂,但是耗费资源,效率低。
递归特点:1、一般通过函数实现
2、在函数内部直接或间接调用本身
3、把问题转化为规模缩小的同类子问题,然后递归调用函数
4、必须有一个递归出口
实例:汉诺塔
有三个柱子a、b、c,第一个柱子上有64个盘子,从上往下越来越大,把第一个柱子上的盘子全部移到第三个柱子上。
第一步:把前63个盘子移到b上
第二步:把前62个盘子移到c上
第三步:把前61个盘子移到b上
第四步:把前60个盘子移到c上
.......
第63步:把第一个盘子移到b上
void move(int n , char a, char b , char c)
{
if(n == 1){
cout<<a<<"->"<< c<<endl;
}else{
move(n-1,a,c,b);
cout<<a<<"->"<< c<<endl;
move(n-1,b,a,c);
}
}
实例:阶乘
计算n!
int fun(int n)
{
if(n<=1)
return 1;
return n*fun(n-1);
}