Acm学习总结(11)
递归算法的学习的总结
最常见的递归就是斐波拉契数列
关于上楼梯的问题f(n)=f(n-1)+f(n-2);
然后就是比如说用循环就能解决的阶乘的问题:
fact(int n)
{
if(n=1)
return (1);
else
return(n*fact(n-1));
}要注意非常重要的一点就是递归函数需要设置终止条件,或者是边界否则成了死循环;在补充一下欧几里得算法:求最大公约数M,N规定M>N,M%N作为第二次的除数而N作为第二次的被除数,这个算法应该是数学上推导出来的。
在一个就是数列的全排列问题了;虽然有一个函数next_permutation(str.begin(), str.end())很方便,如果用到递归就是
思想:按住第一个数不动,去排剩下的,再按住第二个数不动再去排剩下的,一直到剩下的数是两个数,两位数的排列就只有两种情况;
void Perm(int list[], int k, int m)
{
if(k==m)
{
for(int i=0;i<=m;i++)
cout<<list[i]<<" ";
cout<<endl;
}
else
for(int j=k;j<=m;j++)
{
swap(list[k],list[j]);
Perm(list,k+1,m);
swap(list[k],list[j]);//带入了几个数发现如果这个地方不再换回来就不对了;
}
}
本次总结就这些了;
Acm学习总结(11)
最新推荐文章于 2023-11-18 20:06:00 发布