c - 斐波那契数列代码

标签 c math

斐波那契数列在数学和计算机科学中有一系列有趣的用途。例如,假设某天某人正在做早餐时,单个霉菌孢子落在面包上。还假设在孢子产生 48 小时后,它能够 self 克隆,并且此后每 24 小时再产生一个新的孢子。最后还假设每个新孢子在创建 48 小时后也开始每天克隆一个新鲜的孢子。

一般来说 F(n) = F(n-1) + F(n-2)。

编写一个程序,打印出每天结束时存在的孢子数量。当孢子数超过一千万时停止。需要多少天?

int days, next, first=0, second=1;

printf("Enter the day you want to know how many spores exists on\n");
scanf("%d", &days);

while(next < 10000000) {

    if(days == 1) {
        next = 1;
    }
    else {
        next = first + second;
        first = second;
        second = next;
    }
}
printf("The day %d has %d spores\n", days, next);

到目前为止,我只能做到这一点。但它不会带我去任何地方。其他人只能使用 while、if 和 scanf 函数吗?

最佳答案

斐波那契数列的运作方式如下:

1 1 2 3 5 8 13 21 34 等....

因此归结为 F(n) = F(n-2) + F(n-1) 的公式。您缺少增加天数的代码。

试试这个:

days = 1;
next = 0;
first = 0;
second = 1;

while(next < 10000000) {
    next = first + second;
    first = second;
    second = next;
    printf("The day %d has %d spores\n", days, next);
    days++;
}

这应该会生成一个正确的斐波那契数列。如果不是,我会更正它。

编辑:我还注意到您的 printf 语句不在 while 循环内。此外,请注意我在进入循环之前如何设置变量,以便在循环内不需要 if 语句。这更像是一个性能问题,因为循环内要做的事情越少,它执行的速度就越快。

关于c - 斐波那契数列代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30230963/

相关文章:

c - 如何将信号从父进程重定向到子进程?

C中指针和整数的比较

algorithm - 数值优化和最小化

c - 这个c文件的mexFunction怎么写

C - 无法在递归函数内进行索引

C程序显示从用户输入的3个数字中的最大和最小数字

javascript - 这个类似射线的动画背后的数学原理是什么?

ruby - 如何从 n 个元素的数组中获取 'fair combination'?

swift - 在 Swift 中获取 double 的小数部分

algorithm - 如何以编程方式找到多边形的方向?