一.递归函数
直接或间接调用自身函数称为递归函数,递归的核心是把一个规模较大的问题拆解为规模较小的问题来求解。
1.递归算法:是一种通过反复性地将问题分解为同类的子问题二解决问题的方法。函数可以通过调用自身来进行递归。(可代替循环)
2.递归的使用条件:
1>需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题的求解方法完全相同。
2>必须有结束递归的条件。
缺点:递归算法的效率往往较低,对时间和内存空间都有着较大的损耗。
优点:使结构复杂的程序简洁精炼,增加可读性。
例:求n!=1*2*3*······*n.
分析如图:
代码如下:
#include<iostream>
using namespace std;
int f(int x){ //递归方法求阶乘
if(x==0){return 1;}
else{return x*=f(x-1);}
}
int main(){
int n;
cin>>n;
cout<<f(n);
return 0;
}
例:n层汉诺塔问题,如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,