計算階乘的C++
我寫了這個代碼:
如何通過函數計算階乘的C++
int fact (int A)
{
int B ;
B= A*(A-1);
return B;
}
int main()
{
int x;
cout <<"Enter number to calulate its factorial :"<<endl;
cin >> x ;
cout << fac (x);
}
計算階乘的C++
我寫了這個代碼:
如何通過函數計算階乘的C++
int fact (int A)
{
int B ;
B= A*(A-1);
return B;
}
int main()
{
int x;
cout <<"Enter number to calulate its factorial :"<<endl;
cin >> x ;
cout << fac (x);
}
你有沒有試過google一下在發佈之前?
您的事實函數只計算一次的階乘。你應該做的事情resursively喜歡:
int fact (int A)
{
if (A <= 1) {
return 1;
}
return A*fact(A-1);
}
,或者如果你想在迭代的方式,那麼你應該做到以下幾點:
int fact (int A)
{
int B = 1, i = 2;
for (; i<=A; i++) {
B = B*i;
}
return B;
}
爲什麼din't你搜索它來代替。
反正...這一切
int n, count;
unsigned long long int factorial=1;
cout<<"Enter an integer: ";
cin>>n;
if (n< 0)
printf("Error!!! Factorial of negative number doesn't exist.");
else
{
for(count=1;count<=n;++count) /* for loop terminates if count>n */
{
factorial*=count; /* factorial=factorial*count */
}
cout<<factorial;
}
首先無關++做與C(你的問題說的)。這是特定於算法的,它們可以用於任何語言。
您可以使用下面的示例作爲參考。
int fact (int A)
{
if (A == 0) {
return 1;
}
return A*fact(A-1);
}
int factorial (int a) {
return a==0 ? 1 : a*factorial(a-1);
}
由於您使用C++而不是C,我會簡單地用一個模板函數去。獎金是:因膨脹/在編譯時執行,你的代碼將被高度優化且基本上是固定的可能幾乎沒有開銷:
// First the generic template for pretty much all numbers
template <unsigned int X>
unsigned int factorial() {
return X * factorial<X - 1>();
}
// Now the specialization for the special case of 0
template <>
unsigned int factorial<0>() {
return 1;
}
例如,計算5的階乘,你」 d只需撥打factorial<5>()
即可。啓用優化後,這隻會導致120
。不幸的是,這對動態變量是不可能的。
我不確定它是有用的還是合適的,因爲優化編譯器能夠在遞歸(或迭代)事實函數通過常量摺疊和內聯變換常量時變換常量。 – 2014-11-08 08:08:02
@BasileStarynkevitch是的,它可能只是取決於優化的水平。無論您是否使用模板,最多都可能沒有任何區別。 – Mario 2014-11-08 08:10:39
不,至少在GCC優化不取決於您是否使用模板(因爲模板擴展發生在優化之前)。所以我低估了你的答案。 – 2014-11-08 08:12:47
你的'事實(10)'結果爲'10 * 9',就是這樣。使用遞歸或循環來完成這項工作。 – 2014-11-08 07:43:04