例题:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假如兔子都不死,问M个月时兔子的数量,M为键盘读入的正整数。(C)
方法一:迭代
#include <stdio.h>
int fib(int n);
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
printf("fib(%d) = %d \n",n,fib(n));
}
return 0;
}
int fib(int n)
{
if(n == 1 || n ==2)
return 1;
else
return(fib(n-1) + fib(n-2));
}
方法二:设置特殊数组
#include <stdio.h>
long int fib[40];
int main()
{
int i,n;
fib[0] = fib[1] = 1;
for(i = 2;i<=40;i++)
fib[i] = fib[i-1]+fib[i-2];
while(scanf("%d",&n)!=EOF)
{
printf("fib[%d] = %d\n", n,fib[n-1]);
}
return 0;
}
一般的题目除了要求计算出数列数值以外,还会要求一行打印5个数此外的要求
eg:按每行输出5个数的形式输出fibonacci数列的前40项(数组法为例)
#include <stdio.h>
long int fib[40];
int main()
{
int i;
fib[0] = fib[1] = 1;
for(i = 2;i<=40;i++)
fib[i] = fib[i-1]+fib[i-2];
for(i = 0;i<40;i++)
{
if((i+1)%5!=0)
printf("%ld\t",fib[i]);
else
printf("%ld\n",fib[i]);
}
return 0;
}