/*請編寫函數(shù)fun,它的功能是:求Fibonacci數(shù)列中大于t(t>3)的最小數(shù),結果由函數(shù)返回。其中Fibonacci數(shù)列F(n)的定義為:
F(0)=0,F(1)=1?
F(n)=F(n-1)+F(n-2)?
假如:當t=1000時,函數(shù)值為1597。
注意:部分源程序給出如下。?
請勿改動main函數(shù)和其他函數(shù)中的任何內容,僅在函數(shù)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;
}
2018-04-15
這是編寫一個函數(shù)的方法:
int fun(int t)
{
int s0=0;
int s1=1;
int s=0;
int i;
for(i=3;i>0;i++) ????????//直接從Fibonacci數(shù)列第三項開始無限循環(huán)
{
s=s0+s1;?????????????????//f(n)
s0=s1; //將f(n-2)的值賦予s0
s1=s; //將f(n-1)的值賦予s1
if(s>t)
break; //當找到第一個即最小t的數(shù)s是跳出循環(huán)
}
return s;
}
這是編寫了兩個函數(shù):
//Fibonacci數(shù)列各項的表達方式
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++)????????//空循環(huán),當f(i)大于t是循環(huán)結束
{????????????????
}
s=f(i);
return s;
}