2 u011703519 u011703519 于 2013.08.15 17: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
xinhaipeng521   2013.08.15 18:37
已采纳

首先你要知道斐波那契数列的规律也就是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,第三个开始就是前面两个相加。

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

xinhaipeng521
xinhaipeng521 fib[41]是个长度为41的数组,数组的坐标元素,这个可能我说得不好,你就理解为数组中的某个元素值,例如fib[4]就是数组fib第四个元素,坐标位置就是3,因为数组是从0开始的,%d输出为整形,printf("F%d==%d\n",i,fib[i]),比如i=0,F0=0
4 年多之前 回复
u011703519
u011703519 还有fib
4 年多之前 回复
u011703519
u011703519 还有F%d 是什么意思
4 年多之前 回复
u011703519
u011703519 可以解释数组的坐标元素是什么东西吗?
4 年多之前 回复
zuoziji10
zuoziji10   2013.08.29 14:21

这样实现的效率不高,计算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;
}
看是简单的“杯子倒水”、看是没有什么技术含量,但是他的效率绝对比迭代来得高。

jiangedward
jiangedward   2013.08.20 17:20

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

lizhen19860908
lizhen19860908   2013.10.17 23:56

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!