习题4-11 兔子繁衍问题 (15分)
题目描述
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
【思路】
这题,看到生兔子就想到斐波那契数列。仔细看看,就是 1 1 2 3 5 8 … , 然后我就想用递归函数来写,直接查出,在哪个月份兔子对的数目最先大于或者等于 n。
【递归写的】
#include<stdio.h>
// 斐波那契
int Fibonacci(int x) {
if (x == 1 || x == 2) return 1;
else return Fibonacci(x - 1) + Fibonacci(x - 2);
}
int main() {
int n;
scanf("%d", &n); // n对兔子
for (int i = 1;; i++) {
if (Fibonacci(i) >= n) {
printf("%d", i);
break;
}
}
return 0;
}
【其他写法】
以后再来填