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;
}
posted @ 2021-01-14 23:45  园码儿  阅读(49)  评论(0)    收藏  举报