2016-04-26 53 views
-4

请指出以下代码中的错误: #include using namespace std;在C++中为一个数字的阶乘编写自己的错误

int factorial(int n) { 
    int f=1; 
    factorial(0)=1; 
    factorial(1)=1; 
    while(n>=0) 
    { 
     f=f*factorial(n); 
     n=n-1; 
    } 
    return f; 
} 

int main() { 
    cout << factorial(5); 
} 

在编译器中,我得到错误“左值作为分配因子(0)= 1的左操作数所需的错误;”

我无法理解上述错误。请解释。

+0

你的语法是非常错误的。您可能想要在C++上找到一本好书,课程或教程(如果您已经这样做,请查看材料)。 – crashmstr

+0

你想达到什么目的?你不能为一个函数调用'factorial(0)= 1;' – RomCoo

+1

分配一个值你想用'factorial(0)= 1;'和'factorial(1)= 1'来做什么?方式:'如果(n <= 1)返回1' – Kapobajza

回答

1

你的代码真的是错的。你不能将一个函数赋值给一个值。我猜你正在寻找这样的东西:

#include <iostream> 
using namespace std; 

int Factorial(int n) 
{ 
    if (n <= 1) 
     return 1; 

    return n * Factorial(n - 1); 
} 

int main() 
{ 
    int number = Factorial(5); 
    cout << number << endl; 
} 
+0

您不能将值赋给函数结果,因为函数本身已经返回一个值作为结果,即'int function(int)'_returns_''int'作为结果。 – user3078414

+0

@Rohit Sharma当你不了解主题和“白痴”只是试图帮助你理解的时候,真正成熟的人可以称呼白痴和白痴。祝你好运,以这种态度获得帮助。 –

+0

真的吗?你真的帮助我吗?所有人都只是说回到你的概念或语言不允许或等等等等等等。但是没有人关注语言为什么这么做的原因。只有user3078414足够接近以解决我的查询 –

0

C++不允许模式匹配函数定义。

0

更新:这一个像学校上周六...

#include <iostream> 
#include <unordered_map> 

int& factorial(int n) { 
    static std::unordered_map<int,int> memo = {{0,1},{1,1}}; 
    if(!memo.count(n)) { 
     memo[n] = n * factorial(n-1); 
    } 
    return memo[n]; 
} 

int main() { 
    using std::cout; 

    cout << factorial(1) << '\n'; 
    cout << factorial(5) << '\n'; 
    cout << " ----\n"; 
    factorial(1) = 123456789;  // make factorial(1) better 
    cout << factorial(1) << '\n'; 
    cout << factorial(5) << '\n'; // factorial(5) is still 120 
    //        because its value was saved 
    //        by the first factorial(5) call 
} 

它像原来的例子,但对于factorial(0)factorial(1)的memoized结果必须与一个init列表添加,很遗憾。从factorial(0) = 1;开始会导致无限递归。当使用值n调用时,此版本还会自动将任何缺失的因子值添加到其备忘录中,对于所有正整数< = n。最重要的是,用户仍然可以为任何输入定制memoized结果,如下所示:factorial(5) = 0;

下面是使用类和垃圾的示例。

#include <iostream> 
#include <unordered_map> 

class factorial { 
    static std::unordered_map<int,int>& map() { 
     static std::unordered_map<int,int> outs; 
     return outs; 
    } 
    int n; 
public: 
    factorial(int n) : n(n) {} 
    factorial& operator = (int out) { 
     map()[n] = out; 
     return *this; 
    } 
    operator int() const { 
     if(map().count(n)) return map()[n]; 
     return factorial(n-1) * n; 
    } 
}; 

int main() { 
    using std::cout; 

    // need to set low factorial values 
    // to prevent infinite recursion 
    factorial(0) = 1; 
    factorial(1) = 1; 

    cout << factorial(1) << '\n'; 
    cout << factorial(5) << '\n'; 
    cout << " ----\n"; 
    factorial(1) = 123456789;  // make factorial(1) better 
    cout << factorial(1) << '\n'; 
    cout << factorial(5) << '\n'; // now factorial(5) is all messed up 
    cout << " ----\n"; 
    factorial(5) = 120;   // fix factorial(5) 
    cout << factorial(5) << '\n'; // worked! 
} 

输出:

1 
120 
    ---- 
123456789 
1929912792 
    ---- 
120 

Live Demo

+0

你是真让我困惑。 –

相关问题