C中特定术语的斐波那契

问题描述 投票:-1回答:2

因此,我编写了一个程序以输出用户输入的斐波那契数列的第n个项。但是,当它执行时,它显示错误的数字。不知道该怎么办。

这是我的斐波那契函数循环:

#include <stdio.h>

int main()
{
    int x;
    int n = 0;
    int nn = 1;
    int fib;
    int counter;

    printf("Enter a fibonacci term: ");
    scanf("%d", &x);
    fibo(x, n, nn, fib, counter);
}

int fibo(int x, int n, int nn, int fib, int counter)
{
    for (counter = 0; counter < x; counter++)
    {
        fib = n + nn;
        n = nn;
        nn = fib;
    }
    printf("The %dth term is: %d", x, fib);
}

错误的输出:输入斐波那契术语:4(用户输入值的示例)第四项是:5

所需的输出:输入斐波那契术语:4第四项是:2

c loops fibonacci
2个回答
0
投票

这里是您代码的固定版本。您的算法落后了一个。我为第一个元素添加了一个值,并通过一次迭代减少了循环。我在没有警告的情况下使用GCC 9.2编译了代码。

#include <stdio.h>

void fibo(int x, int n, int nn);

int main()
{
    int x;
    int n = 0;
    int nn = 1;

    printf("Enter a fibonacci term: ");
    scanf("%d", &x);
    fibo(x, n, nn);
}

void fibo(int x, int n, int nn)
{
    int fib = 0;
    for (int counter = 1; counter < x; counter++)
    {
        fib = n + nn;
        n = nn;
        nn = fib;
    }
    printf("The %dth term is: %d", x, fib);
}

-1
投票
#include <stdio.h>
#include <math.h>

int main(void) {
    double root5 = sqrt(5.0);
    double phi = (1 + root5) / 2;
    int n = 8;  // Put an Index Here.

    int  Fn = (int)((pow(phi,n) - pow(-phi, -n)) / (2 * phi - 1 ));
    printf("%d: %d\n", n, Fn);   // Get a Fibonacci Value here.

    return 0;
}

输出

Success #stdin #stdout 0s 4172KB
8: 21

因为顺序是:

Index: 1 | 2 | 3 | 4 | 5 | 6 |  7 |  8 
Fib:   1 | 1 | 2 | 3 | 5 | 8 | 13 | 21
© www.soinside.com 2019 - 2024. All rights reserved.