制作一个程序,计算前20个斐波纳契数的总和

时间:2014-03-20 02:46:55

标签: function pointers fibonacci

我需要编写一个具有前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;
}

我知道这只是制作斐波纳契数而不是总和。

4 个答案:

答案 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]并计算总和而不计算其间的斐波纳契数。