Fibonacci数

来源:互联网 发布:广州广大淘宝培训 编辑:程序博客网 时间:2024/06/07 07:13


描述
无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为
F(n)=1 ...........(n=1或n=2)
F(n)=F(n-1)+F(n-2).....(n>2)
现要你来求第n个斐波纳奇数。(第1个、第二个都为1)
输入
第一行是一个整数m(m<5)表示共有m组测试数据
每次测试数据只有一行,且只有一个整形数n(n<20)
输出
对每组输入n,输出第n个Fibonacci数
样例输入
3135
样例输出
125

思路:

方法一:                                                                                                                   输出fibonacci数列的前n个数值

   f1    f2    f3                                                                                                               int f1=1,f2=1,f3;

  1      1     2     3     5      8       13      21 .........                                                          int i;

    f1   +   f2   =   f3                                                                                                     for(i = 1 ; i< = n-2; i + +)

                        ↓                                                                                                    {

               f1   +   f2   =  f3                                                                                                     f3=f1+f2;

                           ↓       ↓                                                                                  printf("%12d\n",f3);

                     f1  +  f2  =f3                                                                          f1=f2; 

                                                                                                                   f2=f3;

                                                                                                        }

方法二:

  f1   f2   f3                                                                  输出fibonacci数列的前n个数值

 1      1     2     3     5      8       13      21 .........                                int f1=1,f2=1;

 | f1   +   f2  =  f1                                                                       int i;

 |           f2  +  f1   =   f2                                                            for(i = 1; i< = n / 2; i + +) 

                                                                                                      {

 |            f1   +   f2  =  f1                                                             printf("%d %d ",f1,f2);

   |                               f2  +  f1  =  f2                                                   f1=f1+f2;

                                                                                                                  f2=f2+f1;

                                                                                                       }                 

   

#include<stdio.h>                         //为上述方法一int main(){    int t,i,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int f1=1,f2=1,f3;        if(n==1||n==2)            printf("1\n");        else        {            for(i=1; i<=n; i++)            {                if(i==n-1)                                                printf("%d\n",f3);                f3=f1+f2;                f1=f2;                f2=f3;            }        }    }    return 0;}


 

0 0
原创粉丝点击