开发环境Vistual Studio 2022
这个问题通常是以“一对兔子从出生后第三个月起每个月都生一对兔子,新生的一对兔子从出生后第三个月起也能每个月生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?”为描述,其实际上就是求解斐波那契数列中第n个数的值。例如,当 n=7 时,表示过去7个月,根据斐波那契数列的递推规律,可以得到第7个月结束时共有13对兔子。
#include <stdio.h>
int main() {
int f1 = 1;
int f2 = 1;
printf("%d\n", f1);
printf("%d\n", f2);
int f3;
for (int i = 1; i <= 38; i++) {//这个程序输出40位,前面已经定义两位,所以设置38
f3 = f1 + f2;
printf("%d\n", f3);
f1 = f2;
f2 = f3;
}
return 0;
}
优化:只有两个变量
#include <stdio.h>
int main() {
int f1 = 1, f2 = 1;
for (int i = 1; i <= 20; i++) {//一次性输出两位,所以设置20;总输出40位
printf("%d\n%d\n", f1,f2);
f1 = f1 + f2;
f2 = f1 + f2;
}
return 0;
}
用递归解决
#include <stdio.h>
int fibonacci(int n) {
if (n == 0) {
return 0;
}
else if (n == 1) {
return 1;
}
else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
int n = 7;
int result = fibonacci(n);
printf("斐波那契数列第%d项的值为: %d\n", n, result);
return 0;
}