概念
递归就是某个函数直接或间接调用自身的问题求解过程。
通过将自身问题划分成相同性质的子问题的求解过程,这些小问题的求解过程较容易,小问题的解就构成了原问题的解。
步骤
1.理解题意,待求问题的解F(X)
2.通过寻找函数G(),使得F(X)=G(F(X-1)) (原解可以用一些子问题的解来表示,寻找递推关系式)
3.且已知F(0)的值,就可以通过F(0)和G()来求F(X)的解
要点
1.如何将原问题划分成子问题
2.递归终止的条件,最小子问题的求解,允许有多个出口
3.界函数,它保证递归的规模向出口靠拢
关键
1.找出递推关系式
2.找到递归终止条件
注:深层次的递归可能导致栈溢出,可以考虑使用全局数组或动态分配数组
举例
求N的阶乘
<1>非递归
#include <iostream>
using namespace std;
int main()
{
int n;
int count=1;
cin>>n;
for (int i=2; i<=n; i++) {
count*=i;
}
cout<<count<<endl;
}
<2>递归
递推关系式 f(x)=x*f(x-1)
终止条件 乘到1后,x-1=0,结束递归返回1
#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;
int count=f(n);
cout<<count<<endl;
}