PTA-快速幂

要求实现一个递归函数,高效求ab(1≤a,b≤62,ab<263)。

函数接口定义:

cs 复制代码
long long int pow(int a, int b);

其中ab 是用户传入的参数。

裁判测试程序样例:

cs 复制代码
#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; 
}

输入样例:

复制代码
2 3
2 10

输出样例:

复制代码
8
1024

分析:

  1. 首先判断指数b是否为0,如果是,则返回1,因为任何数的0次方都是1。
  2. 如果指数b为奇数,则递归计算a的b-1次方,然后将结果乘以a。这是因为a的奇数次方可以表示为a乘以a的(b-1)次方。
  3. 如果指数b为偶数,则递归计算a的b/2次方,然后将结果乘以自身。这是因为a的偶数次方可以表示为(a的b/2次方)的平方。
  4. 最终返回计算得到的结果。

C语言:

cs 复制代码
#include<iostream>
using namespace std;

long long int pow(int a, int b) // 递归方式求a^b
{
    if (b == 0)
        return 1;
    if (b % 2 == 1) // 当b为奇数
        return a * pow(a, b - 1);
    else { // 当b为偶数
        long long int c = pow(a, b / 2);
        return c * c;
    }
}

总结:

这段代码利用了递归的思想,将一个复杂的问题(a的b次方)分解为更小的子问题(a的(b-1)次方或a的b/2次方)。然后逐步递归求解子问题,最终得到原问题的解。此外,代码中还利用了递归终止条件(当b为0时),确保递归过程能够终止并返回结果。

相关推荐
Jerry14 分钟前
LeetCode 92. 反转链表 II
算法
小王C语言15 分钟前
【3. 基于 Vibe Coding 的 OJ 平台】. 构建仓库、环境准备、需求梳理、安装依赖
网络·c++
骊城英雄25 分钟前
Rust从入门到精通-trait
人工智能·算法·rust
可编程芯片开发1 小时前
基于PI控制算法的pwm直流电机控制系统Simulink建模与仿真
算法
小王C语言1 小时前
【8.进行接口测试】:通过 curl 进行接口自动化测试 / 通过 python 程序进行接口自动化测试
网络·c++
一条大祥脚1 小时前
26杭电暑期第三场 DP|费用流|分解质因子|数论|贪心|图论|期望|无穷级数
网络·图论·网络流·无穷级数·费用流
怕浪猫1 小时前
2840亿参数只卖白菜价:DeepSeek V4 Flash 正式版上线,Agent 能力暴涨6倍
人工智能·算法
让学习成为一种生活方式1 小时前
苄基异喹啉生物碱糖基转移酶UGT74AN1晶体--Journal of Agricultural and Food Chemistry
人工智能·算法
alphaTao1 小时前
LeetCode 每日一题 2026/7/27-2026/8/2
python·算法·leetcode
888CC++2 小时前
C++ 快速学习指南:从入门到进阶的实战路线
开发语言·c++