从算法学起C语言--费氏数列

转载请注明出处,珍惜下劳动成果撒~~~

背景说明:

Fibonacci为1200年代的欧洲数学家,在他的著作中曾经提到:若有一只兔子每个月生一只小兔子,一个月后小兔子也开始生产,起初只有一只兔子,一个月后就有两只兔子,两个

月后就有3只兔子,三个月后就有五只兔子(小兔子开始投入生产)......


大天朝白话文:

找规律并求函数表达式:1,1,2,3,5,8,13,21,34,55,89......


解:

问题混合起来比较烦人,ok,分开看.每只兔子都按同一个规律走,出生ing(0个月),成长ing(1个月),生兔子ing(开始投入生产).把这一规律总结下,设为f(x).那么,当x为0和1的时候,可以列出如下表达式:

f(x) = x;   x = 0,1.这个表达式就表示一只兔子出生后的前两月,它所代表的兔子数量.那么在分析2个月以后的那些风花雪月的事.

第二个月,兔子数量是当前的兔子数量+生产的兔子数量.f(x-1)表示当前的兔子数量,在我们的表达式中,我们定义了0个月这个未出生的数量,那么一个兔子如果想要生产,至少要经过0,1这两个月,所以把f(x-2)作为生产的兔子数量.如果还不理解,这样看,假设第二个月,f(2),那么上个月的兔子数量就是f(1)即为1,生产的兔子数量就是f(0),即没有生产(2个月以前这只兔子还木有出生,还在出生ing中).f(3)表示第三个月的兔子数量,上个月的兔子数量f(2)刚才以求得是1,然后这个月这只兔子开始生产,即f(1) = 1,那么f(3)就是2.


总结归纳表达式:

{ f(x) = f(x-1)+f(x-2);  x > 1,x为正整数. f(x) = x ; x=0,1.}


尝试写代码:


先写f(x) = x的情况:

Fib[0] = 0;
	Fib[1] = 1;

然后写f(x) = f(x-1) + f(x-2);的情况:

Fib[i] = Fib[i-1] + Fib[i-2];

那么x的值是未知的,所以改造下:

for(i = 2;i < N ; i++)
		Fib[i] = Fib[i-1] + Fib[i-2];

然后加上main函数作为入口:

#include <stdio.h>
#include <stdlib.h>
#define N 20

main(void)
{
	int i;
	int Fib[N] = {0};

	Fib[0] = 0;
	Fib[1] = 1;

	for(i = 2;i < N ; i++)
		Fib[i] = Fib[i-1] + Fib[i-2];

	for(i = 0 ; i<N ; i++)
		printf("第 %d 个月有 %d 只兔子\n",i,Fib[i]);

	printf("\n");
	system("pause");
	return 0;
}

查看运行结果:



完美执行~~!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值