相关疑难解决方法(0)

具有三元的简单C++ 11 constexpr阶乘超过最大模板深度

如果我使用specialized编写一个编译时阶乘函数,下面的代码就足够了,并且正确地提供120作为结果fact1<5>():

template <size_t N>
constexpr size_t fact1() { return N*fact1<N-1>(); }

template <>
constexpr size_t fact1<0>() { return 1; }
Run Code Online (Sandbox Code Playgroud)

但是,对于单个函数体和三元运算符,如下面的代码所示,G ++ 4.7和Clang ++ 3.2都超过了它们的最大模板实例化深度.它似乎1从未返回fact2.为什么这个定义fact2<5>()不会返回120?

template <size_t N>
constexpr size_t fact2() { return N==0 ? 1 : N*fact2<N-1>(); }
Run Code Online (Sandbox Code Playgroud)

c++ recursion templates constexpr c++11

4
推荐指数
1
解决办法
1787
查看次数

如何计算x的阶乘

如何获得一个整数的值x,表示为x!,它是数字1到x的乘积.

例: 5! 1x2x3x4x5 = 120.

int a , b = 1, c = 1, d = 1; 
printf("geheel getal x = ");
scanf("%d", &a);
printf("%d! = ", a);
for(b = 1; b <= a; b++)
{
     printf("%d x ", c);
     c++;
     d = d*a;
}
printf(" = %d", d);
Run Code Online (Sandbox Code Playgroud)

c operators factorial

2
推荐指数
3
解决办法
2902
查看次数

标签 统计

c ×1

c++ ×1

c++11 ×1

constexpr ×1

factorial ×1

operators ×1

recursion ×1

templates ×1