#include <stdio.h>

int fibonacci(int n) {
    int count, n1 = 0, n2 = 1, fib = 0;
    printf("Given number: ");
    scanf("%d", &n);
    count = 0;
    while (count < n) {
        fib = n1 + n2;
        n1 = n2;
        n2 = fib;
        ++count;
        if (n > fib)
            printf("%d ", fib);
    }
    return 0;
}

int main() {
    int szam;
    fibonacci(szam);
    return 0;
}


我已经走了这么远,我只是不知道如何计算数字。
例如:
输入:10
输出:1 2 3 5 8

但是应该是:
在:10
出:5

最佳答案

代码中的停止条件不正确:计算n斐波那契数后停止,而不是计算大于n的斐波那契数时停止。

这是更正的版本:

#include <stdio.h>
int count_fibonacci(unsigned long long int n) {
    int count = 0;
    unsigned long long n1 = 1, n2 = 1, fib = 1;
    while (fib < n) {
        count++;
        fib = n1 + n2;
        n1 = n2;
        n2 = fib;
    }
    return count;
}

int main(void) {
    unsigned long long n = 0;
    printf("Given number: ");
    scanf("%llu", &n);
    printf("%d\n", count_fibonacci(n));
    return 0;
}


因为您的斐波那契数列为:5,所以它会为输入10打印1 2 3 5 8...

但是标准序列通常定义为1 1 2 3 5 8...,并且应返回6。您可以通过将初始状态更改为n1 = 0, n2 = 1, fib = 1来获得此行为。

关于c - 斐波那契数的数量小于给定的n,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35730930/

10-11 20:56