u011703519
HenryStark
采纳率100%
2013-08-15 09:26

斐波那契数列 利用循环输出前40项 (初学者)

已采纳

我在查了资料之后找到以下解决方法:
#include
  int main()
  {
  long fib[41] = {0,1};
  int i;
  for (i=2;i<41;i++) fib[i] = fib[i-1]+fib[i-2];
  for (i=1;i<41;i++) printf("F%d==%d\n",i,fib[i]);
  getch();
  return 0;
  }

有些看不懂,希望可以帮我详细分析一下运算过程,或者提供相关的知识点以供研究。
谢谢。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • xinhaipeng521 _snail_ 8年前

    首先你要知道斐波那契数列的规律也就是0、1、1、2、3、5、8、13、21、……,通过这个就可以知道从第三个元素开始,他的值等于前面两个元素的和,下面分析代码

    long fib[41] = {0,1}; 定义了一个数组,设置了0 1 坐标元素的值为 0 1

    for (i=2;i<41;i++) fib[i] = fib[i-1]+fib[i-2]; 这个循环是冲i等于2开始运算的,也就是数组的第三个元素,fib[i] = fib[i-1]+fib[i-2] 因为斐波那契数列的规律是从第三个元素开始等于前面两个相加,也就是fib[i-1],fib[i-2]这两个

    for (i=1;i<41;i++) printf("F%d==%d\n",i,fib[i]); 这里是打印,上面的代码可以看出,数组第一个和第二个元素没有参与运算,但long fib[41] = {0,1};这里已经声明了,所以第一个第二个元素固定为0、1,第三个开始就是前面两个相加。

    不知道说的详细不详细,你明白不明白。

    点赞 2 评论 复制链接分享
  • zuoziji10 zuoziji10 8年前

    这样实现的效率不高,计算40项表现不出来,如果计算400项的时候,那就会发现非常慢。
    long main(int n){
    if(n > 1){
    long a = 0, b = 1;
    do{
    long temp = b;
    b += a;
    a = temp;
    }while(--n > 1);
    return b;
    }
    return n;
    }
    看是简单的“杯子倒水”、看是没有什么技术含量,但是他的效率绝对比迭代来得高。

    点赞 1 评论 复制链接分享
  • lizhen19860908 简约而不简单 8年前

    long a = 0;
    long b = 1;
    int count = 40;
    for (int i = 0; i < (count+1)/2; i++) {
    b = a + b;
    a = a + b;
    }
    这样效率更高些

    点赞 评论 复制链接分享
  • jiangedward jiangedward 8年前

    这个是迭代法,如果你想要深入探讨的话,可以去研究高效的矩阵乘法。

    点赞 评论 复制链接分享

相关推荐