2014-10-05 53 views
1

我正在用C++編寫一個階乘函數。我有功能正常工作。然而,要求的是,如果 參數是肯定的,則函數必須計算並返回提供給它的數字的階乘(其參數)。如果它接收到一個負數或零的參數,該函數必須返回-1。 我似乎無法讓它返回-1爲零或負數,沒有它也返回負數的正常因子計算。這是我的代碼到目前爲止。如果輸入零或1作爲參數,則C++析因函數必須返回-1

#include <iostream> 
using namespace std; 

long factorial(int x) 
{ 

if(x>1) 
    return (x*factorial(x-1)); 
else 
    return -1; 

} 

int main() 
{ 
int number; 
cout << "Enter a number: " << endl; 
cin >> number; 
cout << factorial(number); 
cout << endl; 

return 0; 

} 
+0

切換if/else語句的順序。首先檢查0/1並返回-1,否則計算階乘 – dchhetri 2014-10-05 19:21:27

+0

12!是適合32位整數的最大因子。任何更大的將會溢出並可能會給你一個負面的結果。 – jrok 2014-10-05 19:22:40

+0

@jrok是不是從'34!'開始的'0'? (否則,我認爲_half_結果是否定的。) – AlexD 2014-10-05 19:35:10

回答

0

你需要兩個基本情況:

if (x <= 1) return -1 
if (x == 2) return 2 
else do the recursion 

但是,這是不正確數學。 1和0的階乘是1

+0

如果我正確地閱讀了標題,即使'1!'應該導致爲'-1'。 – AlexD 2014-10-05 19:23:42

+0

@AlexD:是的,所以它更不正確。 – 2014-10-05 19:24:22

+0

請注意,問題的文本與您的第一個版本一致。 – 2014-10-05 19:24:57

0

你可以用你的函數:

long _factorial(int arg){ 
    if(x>1) 
     return (x*factorial(x-1)); 
    else 
     return 1; 
} 

inline long factorial(int arg){ 
    return (arg<=0)?-1:_factorial(arg); 
} 
0

所以我覺得我得到了它。 1的階乘確實需要是1而不是-1。我的教授希望零和任何負數返回-1。感謝大家的迴應。

#include <iostream> 
using namespace std; 

long factorial(int x) 
{ 

if(x<=0) 
    return -1; 
if(x == 1) 
    return 1; 
if(x==2) 
    return 2; 
else 
    return (x*factorial(x-1)); 

} 
+0

零的階乘實際上等於'1'。 – ctzdev 2014-10-05 19:56:39

+0

第三個基本情況('if(x == 2)')是多餘的。 – 2014-10-05 19:57:52

+0

「if」與「return」之後的任何「else」也是多餘的。 – 2014-10-05 21:10:41

相關問題