2014-10-05 48 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

相关问题