请在下面的代码中指出错误: #包括 使用namespace std;
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);
}
在编译器中,我得到错误&#34;左值作为赋值factorial(0)= 1的左操作数;&#34;
我无法理解上述错误。请解释一下。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
C ++不允许使用模式匹配函数定义。
答案 2 :(得分: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)
的记忆结果必须添加一个初始列表。从factorial(0) = 1;
开始会导致无限递归。使用值n
调用时,对于所有正整数&lt; = n
,此版本还会自动将任何缺少的因子值添加到其备忘录中。最重要的是,用户仍然可以为以下任何输入自定义记忆结果: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