*兔子生兔子问题。说有一对刚出生的小兔子,一个月后长成大兔子,再过一个月以后,每个月又要生一对小兔子。在没有死亡的情况下,问第n个月后总共有多少对兔子。假设第一个月有1对兔子,编程计算12个月以内的兔子数。
输入输出样例
输入:1 输出:1(注意:输出后面没有空格或换行)
输入:7 输出:13
输入:9 输出:34
注意:可以把兔子刚出生的时候看成1月,当时只有一对兔子;过一个月后,也就是2月,小兔子长成大兔子了,目前还是一对兔子;再过一个月,也就是3月,大兔子就生了一对小兔子,现在就是两对兔子了,而且会一直生下去……于是每过一个月就会增加一对兔子。当然还得考虑到生出来的小兔子也会长大,也会再生小兔子,于是就还要加上后出生的小兔子数……如此推下去,即可得出是个Fibonacci数列。(斐波那契数列,又称黄金分割数列,指的是1、1、2、3、5、8、13、21、34、…。这些数字从第三个开始,每一个数字都等于前面两个数字的和。同时后一个数字与前一个数字的比值,无限接近于黄金分割0.618。在数学上,斐波纳契数列以如下方法定义:F(0)=1、F(1)=1,F(2)=2,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
#include <stdio.h>
#include <stdlib.h>
int fibonacci_helper(int n) {//这里n表示第n个月
if (n == 1 || n == 2) {
return 1;//第1个月和第2个月只有一对兔子
}
return fibonacci_helper(n - 1) + fibonacci_helper(n - 2);//从第三个月开始每个月的兔子数是前两个月的和
}
void calculate_rabbit_numbers() {
int n;
while (scanf("%d", &n)!= EOF && n >= 1 && n <= 12) {
int result = fibonacci_helper(n);
printf("%d", result);
}
}
int main() {
calculate_rabbit_numbers();
return 0;
}