递归就是将一个大问题逐渐分解,变成越来越小的的问题,直到最终可以被解决的程度
递归要点:(1)出口,就是程序结束的条件
(2)递归的调用过程
举例1:求斐波那契数列的第20项值是多少?(1,1,2,3,5……)
(1)出口:n==0||n==1,f[n]=1;
(2)过程 :即 F(n)=F(n-1)+F(n-2);
核心代码实现 如下
int f(int n){
if(n==0||n==1)
return 1;
else
return f(n-1)+f(n-2);
}
//全排列
inline void Swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void Perm(int list[],int k,int m)
{
if (k == m-1)
{
for(int i=0;i<m;i++)
{
printf("%d",list[i]);
}
printf("n");
}
else
{
for(int i=k;i<m;i++)
{
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}
}