斐波那契数列在数学和计算机科学中有一系列有趣的用途。例如,假设某天某人正在做早餐时,单个霉菌孢子落在面包上。还假设在孢子产生 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 语句。这更像是一个性能问题,因为循环内要做的事情越少,它执行的速度就越快。
我是一名优秀的程序员,十分优秀!