我需要编写一个具有前20个斐波纳契数之和的程序。使用两个函数来召唤大小和20个数字的总和。这是我到目前为止所做的。
#include <stdio.h>
int main( )
{
int fib[20] = {0,1};
int *fib_ptr = &fib[2];
for(int i = 0; i < 20; i++){
*fib_ptr = *(fib_ptr - 1) + *(fib_ptr - 2);
fib_ptr++;
}
for(int x = 0; i < 20; x++)
printf(“%4d”, fib[x]);
printf(“\n”);
return 0;
}
我知道这只是制作斐波纳契数而不是总和。
答案 0 :(得分:1)
而不是最后的printf
,只需在最后循环时添加这些数字。
Sum += fib[x]
答案 1 :(得分:0)
#include <stdio.h>
int main( )
{
int fib[20] = {0,1}, *fib_ptr = &fib[2], x, i, sum = 0;
for(i = 0; i < 20; i++){
*fib_ptr = *(fib_ptr - 1) + *(fib_ptr - 2);
sum += *(fib_ptr-2);
fib_ptr++;
}
//for(x = 0; x < 20; x++)
//printf("%4d", fib[x]);
printf("%d\n",sum);
return 0;
}
答案 2 :(得分:0)
只计算一次所有内容。有
int result = 1; // fib[0] + fib[1]
并在每个计算循环后添加新值
result += *fib_ptr;
,你的数组需要大小为2
int fib[2] = {0,1}; // index it with fib[i%2] in loop
答案 3 :(得分:0)
由于
Fib [n + 1] = Fib [n] + Fib [n-1],
也是
Fib [n-1] = Fib [n + 1] -Fib [n],
这样斐波纳契数的总和可以写成一个伸缩的总和,最后到底
Fib [1] + ... + Fib [n] =(Fib [3] -Fib [2])+(Fib [4] -Fib [3])+ ... +(Fib [n + 2]-FIB [N + 1])
= Fib [n + 2] -Fib [2] = Fib [n + 2] -1
如果n很大,则可以使用半边形和平方算法来计算Fib [n + 2]并计算总和而不计算其间的斐波纳契数。