基础算法--顺推法

经典问题 斐波拉契的兔子


从前,有一个穷光棍,平时只知好吃懒做,不肯踏踏实实做事情,还经常想入非非做发财梦。一天,他在路边捡到一个鸡蛋,他非常高兴,捧着鸡蛋就在脑子里就盘算开了:“我借别人的母鸡把这个蛋孵成小鸡,等小鸡长大了,就可以生蛋,我再把生的蛋孵成鸡,这些鸡又可以生更多的蛋,蛋又可变成更多的鸡,过不了几年,我就可以把蛋和鸡去换许多钱,然后可以盖新房……”,他越想越高兴,不禁得意忘形手舞足蹈,忽听“啪”的一声,鸡蛋掉在地上,碎了!懒汉看着摔碎了的鸡蛋,放声痛哭:“哎呀,我的宝贝!我的房子呀!……”

上面这则笑话流传已久,对我们很有教育意义,然而恐怕谁都没有认真计算过:如果鸡蛋没有打碎,几年后这个懒汉究竟有多少只鸡,多少个蛋呢?不过,公元1202年,一位意大利比萨的商人斐波拉契(Fibonacci,约1170-1250?)在他的《算盘全书》(这里的“算盘”指的是计算用沙盘)中提出过一个“养兔问题”,却被无数人算过。

这道题说的是:某人买回一对小兔,一个月后小兔长成大兔。再过一个月,大兔生了一对小兔,以后,每对大兔每月都生一对小兔,小兔一个月后长成大兔。如此下去,问一年后此人共有多少对兔子?

你能算清吗?不少同学恐怕看完题就已经动手算了,而且很快就算出了答案。不过对不对可不敢保证。说实在的,这题要算对并不那么容易,这可要不慌不忙细心地算才行。


从上面提炼出来的数列就是著名的斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...


#include<stdio.h>
#define NUM 13

int main(){
	int i;
	long fib[NUM] = {1,1};
	for(i=2;i<NUM;i++){
		fib[i] = fib[i-1]+fib[i-2];
	}
		for(i=0;i<NUM;i++){
			printf("第%d个月的兔子总数为:%d\n",i,fib[i]);
		}
		return 0;
	}




你可能感兴趣的:(基础算法--顺推法)