错误 C2106:'=':左操作数必须是斐波那契数列中的 l 值,方法是动态规划 C++
error C2106: '=' : left operand must be l-value in Fibonacci sequence by dynamic programming in C++
我试图通过动态编程方法编写一个程序来生成斐波那契序列。
#include<iostream>
#include<ctime>
int fib(int index)
{
int memo[] = {0};
memo[0] = 0;
memo[1] = 1;
for(int i = 2; i <= index; i++)
{
fib(index) = fib(index - 1) + fib(index - 2); //error comes here
}
return fib(index);
}
int main()
{
time_t start, end, diff;
int index;
std::cout << "Please, enter the index of fibonacci sequence" << std::endl;
std::cin >> index;
start = time(NULL);
std::cout << "calculating...." << std::endl << fib(index) <<std::endl;
end = time(NULL);
diff = (time_t)difftime(end, start);
std::cout << "Time elapsed: " << diff << std::endl;
return 0;
}
,但是,在 fib(index) = fib(index - 1) + fib(index - 2);
中,
error C2106: '=' : left operand must be l-value
所以,请告诉我我在那条线上做了什么。预先感谢。
您无法正如其他人指出的那样分配给fib(index)
。通过返回参考或指针进行解决方法。
但是,该程序本身是错误的,因为它进入了无限的循环。线
fib(index) = fib(index - 1) + fib(index - 2);
如果索引> 1.使用DP求解fibonacci的正确方法是
int fib(int n)
{
int a = 0, b = 1, c, i;
if( n == 0)
return a;
for (i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
您必须引入这样的临时变量:
int result = 0;
for(int i = 2; i <= index; i++)
{
result = fib(index - 1) + fib(index - 2); //error comes here
}
return result;
这只是技术解决方案。正如Bala指出的那样,您的算法不起作用。
,如果您正在寻找递归的内容,这可能是一个解决方案:
int fib(int index)
{
switch(index) {
case 0:
return 0;
case 1:
return 1;
default:
return fib(index - 1) + fib(index -1);
}
}
对于真正的动态解决方案,您将所有计算值存储在静态备忘录中,并重复使用。
int fib(int index)
{
// Stores fib for given index
static std::map<int, int> memo;
if (index == 0) return 0;
else if (index == 1) return 1;
else {
auto it = memo.find(index);
if (it == memo.end()) {
int r = fib(index - 1) + fib(index -2);
memo[index] = r;
} else return *it;
}
}
您正在分配给L值(int fib(int)
返回)。就像错误消息所述。
还请注意,int memo[] = {0};
创建了一个大小1
的数组,因此编写索引 0
是无效的。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 错误 C2106:'=':左操作数必须是斐波那契数列中的 l 值,方法是动态规划 C++