c++实现已知一对兔子,每个月可以生一对小兔,而小兔经过一个月生长后也可每月生一对小兔。 即兔子的对数是:第一个月1对,第二个月2对,第三个月3对,第四个月5对,…,假设兔子不死,问x个月后,一共有多少对兔子? x<=50
时间: 2023-11-06 10:13:12 浏览: 152
这是一个经典的斐波那契数列问题,可以通过递归或循环来解决。
递归方法:
```c
#include <stdio.h>
int fibonacci(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fibonacci(n-1) + fibonacci(n-2);
}
}
int main() {
int n;
printf("请输入月数:");
scanf("%d", &n);
printf("%d个月后,共有%d对兔子\n", n, fibonacci(n+1));
return 0;
}
```
循环方法:
```c
#include <stdio.h>
int main() {
int n, i;
int a = 1, b = 1, c;
printf("请输入月数:");
scanf("%d", &n);
if (n == 1 || n == 2) {
printf("%d个月后,共有%d对兔子\n", n, 1);
} else {
for (i = 3; i <= n+1; i++) {
c = a + b;
a = b;
b = c;
}
printf("%d个月后,共有%d对兔子\n", n, c);
}
return 0;
}
```
这两种方法的时间复杂度都是O(2^n),随着n的增加,运行时间会呈指数级增长,不适合求解较大的n。可以通过记忆化搜索或动态规划等方法优化。
阅读全文