转载请注明出处,珍惜下劳动成果撒~~~
背景说明:
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;
}
查看运行结果:
完美执行~~!