要求实现一个递归函数,高效求ab(1≤a,b≤62,ab<263)。在这个问题中我们不像往常一样进行每一层的便利 ,像我自己刚开始做的时候就是直接遍历的
long long int pow(int a, int b) {
long long sum=1;
while(b--)
{
sum*=a
}
return sum;
}
这里我们定义了一个函数
long long int pow(int a, int b);
#include<iostream>
using namespace std;
long long int pow(int a, int b); //求a^b
//输入整数a,b,求 a^b,处理到文件尾
int main() {
int a,b;
while(cin>>a>>b) {
cout<<pow(a,b)<<endl;
}
return 0;
}
long long int pow(int a, int b) {
long long base=a; //这里定义的是一个底数
long long result=1; //这里定义的是一个结果
while(b>0) //当我们的指数为0的时候就结束
{
if(b%2==1) result*=base; //当指数为奇数的时候将底数进行一次乘积到result中 这样保证我们的指数为偶数
base*=base; //进行底数相乘 这样可以进行减少运算
b=b/=2; //指数减半
}
return result;//返回结果
}
这道题最主要就是遇到指数为奇数的时候,我们只要将底数乘积一次放入到原始结果中,我们的指数就为偶数,回到偶数当中,我举个例子的话我们会将底数进行 2*2得到4 ,指数就变为一半就为2,回到循环中 base就变为16 ,b=1。然后就进行返回得到16.