C语言1维数组的问题,高手来指点下

#include<stido.h>
void main()
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1] ;
for(i=0;i<=20;i++)
{
if(i%5==0)
printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}
那位高手帮看下,我怎么都看不懂,特别是int f[i]=f[i-2]+f[i-1]这一段!不知道咋回事!我是个新手啊!帮忙指点一下!
有人说就是数组里面有 f[1] f[2] 以后,f[3]是通过f[1]+f[2]这样的规则定义的,后面的也是一个道理!但还是不怎么懂!哪为高手能把算法说的仔细一点!谢谢了!

产生费波那契数:定义是
一个排列,排列里每一个数是前两个数的和.
如1 1 2 3 5 8 13 ......

你的个程序有两个问题
第一个是:#include<stido.h> 应该是stdio.h
第二个是:for(i=0;i<=20;i++) 数组只有20个,而你循环了21次,数组越界,这个是读的,如果是写的,就会有很多问题.应该改成for(i=0;i<20;i++)
下面是算法的解释:
#include "stdio.h"
void main()
{
int i;
int f[20]={1,1}; //先定义前两个数1,1,循环从第3个开始,因为这个算法的定义是每个数是前两个数的和,所以不先定义好,如果算第一个,那它前两个没有数字,数组会出错.
for(i=2;i<20;i++) /*从第三个数开始,循环18次.f[2]...f[19];(注意C++数组下标是从0开始的.*/
f[i]=f[i-2]+f[i-1] ; //当前数是前两个数的和.f[i-2],f[i-1]分别表示前两个数.
for(i=0;i<20;i++) //输出循环,从f[0]...f[19].
{
if(i%5==0) //每输出5个换行,i%5是求余,如何余数为0就换行.
printf("\n"); //输出换行的语句
printf("%12d",f[i]); //输出f[]里面的内容,12表示宽对齐.
}
printf("\n"); //这个不用解释了吧.
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-12-13
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
{
f[i]=f[i-2]+f[i-1];
}
你已经定义了数组的前两个数为1,1
则在for循环中,i从2开始,f[i]=f[i-2]+f[i-1] 相当于 f[2]=f[0]+f[1]
即数组的第2个元素的值等于第0个元素和第1个元素的值之和。
然后i=3的时候,相当于f[3]=f[1]+f[2]
即数组的第3个元素的值等于第1个元素和第2个元素的值之和。
一次类推知道循环结束(i=19),即数组中从第2个元素开始,每一个元素的值都是前两个元素的值之和,这就是有名的斐波纳契(Fibonacci)数列。
1,1,2,3,5,8,...
第2个回答  2006-12-27
#include<stido.h>
void main()
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1] ;
for(i=0;i<=20;i++)
{
if(i%5==0)
printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}
那位高手帮看下,我怎么都看不懂,特别是int f[i]=f[i-2]+f[i-1]这一段!不知道咋回事!我是个新手啊!帮忙指点一下!
第3个回答  2006-12-13
输出是1 1 2 3 5 8。。。么
每次循环f[i]都是前两个数之和
换成这样可能容易看一些
f[i]=f[i-1]+f[i-2];
第4个回答  2006-12-27
费波那契数列
f(n) = f(n-1)+f(n-2)

这个程序是这样的:
产生1到20的费波那契数,
输出,每行5个.
输出是1 1 2 3 5 8。。。么
每次循环f[i]都是前两个数之和
换成这样可能容易看一些
f[i]=f[i-1]+f[i-2];
回答者:nezhang - 江湖新秀 四级 12-13 14:44

int i;
int f[20]={1,1};
for(i=2;i<20;i++)
{
f[i]=f[i-2]+f[i-1];
}
你已经定义了数组的前两个数为1,1
则在for循环中,i从2开始,f[i]=f[i-2]+f[i-1] 相当于 f[2]=f[0]+f[1]
即数组的第2个元素的值等于第0个元素和第1个元素的值之和。
然后i=3的时候,相当于f[3]=f[1]+f[2]
即数组的第3个元素的值等于第1个元素和第2个元素的值之和。
一次类推知道循环结束(i=19),即数组中从第2个元素开始,每一个元素的值都是前两个元素的值之和,这就是有名的斐波纳契(Fibonacci)数列。
1,1,2,3,5,8,...
回答者:yw0031 - 助理 三级 12-13 15:24

产生费波那契数:定义是
一个排列,排列里每一个数是前两个数的和.
如1 1 2 3 5 8 13 ......

你的个程序有两个问题
第一个是:#include<stido.h> 应该是stdio.h
第二个是:for(i=0;i<=20;i++) 数组只有20个,而你循环了21次,数组越界,这个是读的,如果是写的,就会有很多问题.应该改成for(i=0;i<20;i++)
下面是算法的解释:
#include "stdio.h"
void main()
{
int i;
int f[20]={1,1}; //先定义前两个数1,1,循环从第3个开始,因为这个算法的定义是每个数是前两个数的和,所以不先定义好,如果算第一个,那它前两个没有数字,数组会出错.
for(i=2;i<20;i++) /*从第三个数开始,循环18次.f[2]...f[19];(注意C++数组下标是从0开始的.*/
f[i]=f[i-2]+f[i-1] ; //当前数是前两个数的和.f[i-2],f[i-1]分别表示前两个数.
for(i=0;i<20;i++) //输出循环,从f[0]...f[19].
{
if(i%5==0) //每输出5个换行,i%5是求余,如何余数为0就换行.
printf("\n"); //输出换行的语句
printf("%12d",f[i]); //输出f[]里面的内容,12表示宽对齐.
}
printf("\n"); //这个不用解释了吧.
}
回答者:hzfllj - 助理 二级 12-13 15:36

fdgsf
回答者:忍者B - 魔法学徒 一级 12-25 11:24

1
回答者:lin832020 - 助理 二级 12-25 18:31

1
回答者:xuhangxxxx - 试用期 一级 12-25 20:55

.
回答者:yishengbubai - 试用期 一级 12-26 15:42

#include<stido.h>
void main()
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1] ;
for(i=0;i<=20;i++)
{
if(i%5==0)
printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}
那位高手帮看下,我怎么都看不懂,特别是int f[i]=f[i-2]+f[i-1]这一段!不知道咋回事!我是个新手啊!帮忙指点一下!
第5个回答  2006-12-13
费波那契数列
f(n) = f(n-1)+f(n-2)

这个程序是这样的:
产生1到20的费波那契数,
输出,每行5个.
相似回答