问题描述:
在禁止超过1位的位移运算的前提下,对任意非负整数n,计算2^n
蛮力迭代版:
// 在禁止超过1位的位移运算的前提下,对任意非负整数n,计算2^n
#include <stdio.h>
int main()
{
int n = 5;
int pow = 1; //将累积器初始化为1
while (0 < n--)
{
pow <<= 1; //O(1)将累积器翻倍
}
printf("%d\n",pow);
return 0;
}
运行结果:
32
--------------------------------
Process exited with return value 0
Press any key to continue . . .
优化递归版:
主要算法:
① n = 0 ② n为奇数 ③n为偶数
// 幂函数 2^n算法(优化递归版)
#include <stdio.h>
inline int sqr(int a){ return a * a; }
int power2(int n)
{
if (0 == n)
return 1; // 奇数