Acm学习总结(11)

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]);//带入了几个数发现如果这个地方不再换回来就不对了;
}
}
本次总结就这些了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值