我不清楚为什么此功能在Segmentation fault
n >= 128
显然,这应该处理long long n
以输出第一个n
斐波纳契数的总和的最后一位数。
我不要求解决方案,我知道有其他选择!
我想知道的是为什么Segfault?我错过了什么吗?这是我第一次处理deque
btw。
#include <iostream>
#include <deque>
using namespace std;
int fibonacci_sum_deque(long long n) {
if (n <= 2)
return n;
deque<int> sum(4);
sum[0] = 0;
sum[1] = 1;
sum[2] = 2;
for (long long i = 3; i <= n; ++i) {
sum[3] = (sum[2] + sum[1] + 1) % 10;
sum.pop_front();
}
return sum[2];
}
int main() {
long long n = 0;
cin >> n;
cout << fibonacci_sum_deque(n);
}
gdb输出:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000401861 in fibonacci_sum_deque(long long) ()
(gdb) where
#0 0x0000000000401861 in fibonacci_sum_deque(long long) ()
#1 0x000000000040342d in main ()
答案 0 :(得分:3)
您使用4个元素初始化sum
,不再添加任何内容。但是你在sum.pop_front()
次循环中n-2
。您可以使用sum
元素初始化n
,也可以使用push_back
这样的新元素进行初始化:
deque<int> sum(3);
sum[0] = 0;
sum[1] = 1;
sum[2] = 2;
for (long long i = 3; i <= n; ++i) {
sum.push_back((sum[2] + sum[1] + 1) % 10);
sum.pop_front();
}
return sum[2];