算法学习-快速幂1-递归实现
快速幂
1 前言
对于a^n,如果连续乘 n 个 a ,消耗太多时间,而快速幂相对快了很多,这里介绍递归二分思想的快速幂
2 思路
对于an次,可以先计算x=a(n/2),再通过x * x计算an。对于a(n/2),可以先计算x=a^(n/4),再通过x * x计算a(n/2)……一次类推到n=1……如果遇到n是奇数,可以拆成x=a((n-1)/2),再通过x * x * 2计算a^n,下面用递归实现。
3 代码
void FastQ(int a,int n)//a是底数,n是指数
{
bool flag=0;
if(n==1) return a;
if(n%2==1) {flag=1;n--;}
int x=FastQ(a,n/2);
if(flag==1) return x*x*2;
else return x*x;
}
还可以进一步压缩
void FastQ(int a,int n)
{
if(n==1) return a;
int x=FastQ(a,n/2);
return (n%2==0?1:m)*x*x;
}
最后
虽然,,挺简单的,但快速幂折磨了我很久,没错,就是麦森数。本应该是道比较简单的题,结果浪费我很多时间。

浙公网安备 33010602011771号