2 升至 N 次幂,无需任何循环或递归或库函数
2 raised to power n without any loop or recursion or library function
下面的程序计算2的幂n,而不使用任何循环,运行时递归或库函数[pow]。
它使用模板元编程技术。
#include <iostream>
using namespace std;
template<int n> struct funStruct
{
enum { val = 2*funStruct<n-1>::val };
};
template<> struct funStruct<0>
{
enum { val = 1 };
};
int main()
{
cout << funStruct<8>::val << endl;
return 0;
}
我在徘徊,我可以用功能代替结构吗?
正如@tdammes指出的那样,显而易见的解决方案只是一种非迭代的非递归方法:
constexpr int pow2( unsigned pwr ) {
return 1 << per;
}
通过使用constexpr
编译器将在编译时计算结果并生成编译时常量。如果您仍想使用递归,您可以:
constexpr int pow2( unsigned pwr ) {
return pwr==0? 1 : 2*pow2(pwr-1);
}
这基本上与元编程技巧相同的编译时递归,以更简洁和易于阅读的方式。当然,使用 constexpr
需要 C++11,所以如果你没有它,你总是可以使用原始的元编程技巧,或者@tdammers适应的方法:
template <unsigned int N>
struct pow2 {
static const unsigned int value = 1 << N;
};
这是一个显而易见的解决方案:
unsigned int power_of_two(unsigned int power) {
return (1 << power);
}
您可以支持有符号幂,但这在整数数学中毫无意义,因为 2 的所有负幂都小于 1,并且会截断为 0。
相关文章:
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 螺旋矩阵在最后一个"for"循环中中断,不显示任何内容
- 简单的 for() 循环基准测试在任何循环绑定下花费相同的时间
- 当在循环中使用时,std::shared_ptr 对该循环的矢量化有任何影响吗?
- 在未满足条件时的任何时刻结束一个段循环
- 为什么循环迭代不打印任何东西?
- 布雷森汉姆线抽屉在渲染任何内容之前经过一定循环后崩溃
- 在循环体内宣布变量有任何缺点
- 如果找不到解决方案,我如何留下递归循环,而不会打印任何东西
- 循环时嵌套有任何问题
- 循环,直到没有遇到 std::vector 的任何元素
- 是否有任何函数可用于在 c++ 编程中传输流程,以替代 while 或 do while 循环
- C 循环虽然不等于任何两个值
- 如果任何条件是错误的,如何从for循环中返回false
- 为什么当用户输入除整数之外的任何内容时,我的程序会无限循环输出?C++
- 使用 for 循环反转数组不执行任何操作
- 这段代码如何在没有任何循环语句或'goto'或递归的情况下循环?
- 如果存在任何循环关系,我应该假设弱指针使用吗?
- OpenMP:嵌套的 for 循环,执行时间几乎没有任何差异
- 是否有任何预处理器指令控制循环展开