据我所知,这看起来应该可行。
前两个元素设置为1(我忽略第一个0)。 for循环应该循环遍历数组,因为斐波纳契数等于前两个数的总和,我想添加它们,然后显示它们。
输出全是2s,我不太清楚为什么。
注意:我不是直接寻找答案,而是我可以自己解决这个问题的方法。
//Fibonacci sequence
#include <stdio.h>
int main(void) {
int fib_numbers[40] = {1, 1}, i;
for(i = 1; i < 40; i++) {
fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
printf("\t%d\n", fib_numbers[i]);
}
return 0;
}
答案 0 :(得分:2)
fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
您只涉及i
和i-1
,斐波纳契公式涉及三个连续索引。
int fib_numbers[40] = {1, 1}, i;
是可怕的IMO。请把它分成两行。
int fib_numbers[40] = {1, 1};
int i;
答案 1 :(得分:2)
在第一步之后,erray元素为0(未初始化,但在这种情况下为0)。关于什么 fib [i + 1] = fib [i] + fib [i-1]; printf(“%d \ n”,fib [i + 1])? 当然,fib必须大小为41而不是40。
答案 2 :(得分:2)
查看此代码行的左侧
fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
并考虑数组中存储值的位置。
答案 3 :(得分:0)
更新代码如下:
for(i = 2; i < 40; i++) {
fib_numbers[i] = fib_numbers[i-1] + fib_numbers[i - 2];
printf("\t%d\n", fib_numbers[i]);
}
答案 4 :(得分:0)
我猜你的循环错了
for(i = 1; i < 40; i++) {
fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
printf("\t%d\n", fib_numbers[i]);
}
你通过覆盖自己来分配我的元素。当i大于1时,第i个元素的值为null。
可能你应该这样做
//Fibonacci sequence
#include <stdio.h>
int main(void) {
int fib_numbers[40] = {1, 1};
for(int i = 2; i < 40; i++) {
fib_numbers[i] = fib_numbers[i - 1] + fib_numbers[i - 2];
printf("\t%d\n", fib_numbers[i]);
}
return 0;
}
但我建议使用递归来查找斐波那契。
//Fibonacci sequence
#include <stdio.h>
int main void() {
int fib_numbers[40] = {1, 1};
for(int i = 2 ; i < 40 ; i++) {
fib_numbers[i] = fibonacci(i);
printf("\t%d\n", fib_numbers[i]);
}
return 0;
}
int fibonacci(int a) {
if (a <= 1) return 1;
return fibonacci( a - 1 ) + fibonacci( a - 2 );
}