2021.1.14
题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 斐波那契数列,这个数列从第3项开始,每一项都等于前两项之和。
方法一:直接模拟。
#include <stdio.h>
int main(){
int a=1,b=1,c;
while(b<=10000000){
printf("%d\n",a);
c = b;
b = a+b;
a = c;
}
return 0;
}
方法二:递推
#include <stdio.h>
int main()
{
int i;
int array[30]={0,1,1}; //定义一个整型数组array,包含30个元素,前三个为0,1,1,其他元素为0
for(i=2;i<30;++i)
array[i] = array[i-1] + array[i-2]; //a[1] 1维数组第2个数据[a[1][2]] 2维数组中第2行第3列的数据
for(i=1;i<30;++i)
printf("%d\n",array[i]);
return 0;
}
方法三: 递归。
#include <stdio.h>
static int map[30]={0,1,1};
int dfs(int x){
if(map[x])return map[x];
else return map[x] = dfs(x-1) + dfs(x-2);
}
int main(){
int i;
for(i=1;i<30;++i)
printf("%d\n",dfs(i));
return 0;
}
浙公网安备 33010602011771号