算法学习-快速幂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;
}

最后

虽然,,挺简单的,但快速幂折磨了我很久,没错,就是麦森数。本应该是道比较简单的题,结果浪费我很多时间。

posted @ 2020-11-27 20:07  七铭的魔法师  阅读(154)  评论(0)    收藏  举报