c++ - 为什么我得到的斐波那契数达到我的数组的大小?
问题描述
我想打印低于 1000 的斐波那契数列。但在我下面的代码中,我不知道为什么要让斐波那契数达到我定义的数组的最大大小?
int main(){
int dp[22] = {0};
dp[0] = 0, dp[1] = 1;
count<<dp[0]<<" "<<dp[1]<<" ";
for(int i=2; dp[i]<=1000; i++){
dp[i] = dp[i-1] + dp[i-2];
cout<<dp[i]<<" ";
}
cout<<endl;
return 0;
}
Expected Output : 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
Actual Output : 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946
解决方案
问题是dp[i]<=1000
这一行的测试:
for(int i=2; dp[i]<=1000; i++){
的值是下一个i
数组元素的索引,它总是包含零,所以测试总是返回true。我不确定为什么当您越过数组末尾时它不会导致一些内存错误。只是机会,我猜。dp[i]<=1000
也许将for
循环重写为while
循环会使这一点更清楚:
int i = 2;
while (dp[i] <= 1000) {
dp[i] = dp[i - 1] + dp[i - 2];
cout << dp[i] << " ";
i++;
}
for
使用循环使这项工作的一种方法:
#include <iostream>
using namespace std;
int main() {
int dp[22] = {0};
dp[0] = 0;
dp[1] = 1;
cout << dp[0] << " " << dp[1] << " ";
for (int i = 2; ; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
if (dp[i] <= 1000) {
cout << dp[i] << " ";
} else {
break;
}
}
cout << endl;
return 0;
}
推荐阅读
- excel - 更强大的 Excel 单元格引用形式
- excel - 如何在 sumproduct(countif(**)) 函数中返回发现为“True”的值?
- c - C 枚举程序一年中的月份未编译
- nhibernate-envers - 有没有办法只跟踪 NHibernate Envers 中的对象删除?
- php - 在 Laravel + Vue 中页面加载时显示所有数据
- python - 动态模块仅使用 python 2.2 不定义 init 函数
- vue.js - Vuex 在样板 Nuxt 应用程序中不起作用
- mysql - 多个表上的 SQL 约束
- javascript - 如何在 MDN 教程中减慢弹跳球
- mysql - 如何使用内部联接使选择查询更有效