用循环计算斐波那契数列(fibonacci),我自己写了一个,找不出错误。

unsigned long fibonacci1(unsigned m)
{
int i;
unsigned long pol,num[2]={1,1};

if(i>2)
{
    for(i=2;i<m;i++)
    {
        pol=num[0]+num[1];
        num[0]=num[1];
        num[1]=pol;
    }
    return pol;    
}
else 
{
    return 1;
}

}

img

有两个小问题,改正如下:


unsigned long fibonacci1(unsigned m)
{
    int i;
    unsigned long pol, num[2] = { 1,1 };
    if (m >= 2)   //将i>2换成m>= 2
    {
        for (i = 2; i <=m; i++)   //将i<m换成i<=m
        {
            pol = num[0] + num[1];
            num[0] = num[1];
            num[1] = pol;
        }
        return pol;
    }
    else
    {
        return 1;
    }
}

参考:https://blog.csdn.net/liyuanbhu/article/details/51703018


uint64_t Fibonacci(unsigned char n)
{
    if( n == 0 ) return 0;
    if( n == 1 ) return 1;
    uint64_t fn, fnn = 1, fnnn = 0;
    for(int i = 2; i <= n; i ++)
    {
        fn = fnn + fnnn;
        fnn = fn;
        fnnn = fnn;
    }
    return fn;
}