/*请编写函数fun,它的功能是:求Fibonacci数列中大于t(t>3)的最小数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 假如:当t=1000时,函数值为1597。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include <math.h> #include <stdio.h> int fun(int t) { /**************Begin************/ int x; if (t>=3){x=(fun(t-1)+fun(t-2));} else if(t==1){x=1 ;return x;} else if(t==0){x=0;return x;} return x; /**************End*************/ } int main() { int n; FILE *out,*in; n=1000; printf("n=%d, f=%d\n",n, fun(n)); /******************************/ in=fopen("in39.dat","r"); out=fopen("out39.dat","w"); while(!feof(in)) { fscanf(in,"%d\n",&n); fprintf(out,"%d\n",fun(n)); } fclose(in); fclose(out); /******************************/ return 0; }
这是编写一个函数的方法:
int fun(int t)
{
int s0=0;
int s1=1;
int s=0;
int i;
for(i=3;i>0;i++) //直接从Fibonacci数列第三项开始无限循环
{
s=s0+s1; //f(n)
s0=s1; //将f(n-2)的值赋予s0
s1=s; //将f(n-1)的值赋予s1
if(s>t)
break; //当找到第一个即最小t的数s是跳出循环
}
return s;
}
这是编写了两个函数:
//Fibonacci数列各项的表达方式
int f(int n)
{
int s=0;
if(n==0)
s=0;
else if(n==1)
s=1;
else
s=f(n-1)+f(n-2);
return s;
}
//求大于t的最小项
int fun(int t)
{
int i=0;
int s=0;
for(i=0;f(i)<=t;i++) //空循环,当f(i)大于t是循环结束
{
}
s=f(i);
return s;
}