编写函数int Fib_Res(int n),其功能是求Fibonacci数列F(n)中大于n的最小的一个数的值,结果由函数返回,其中Fibonacci数列F(n)的定义为; F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2)

admin2012-07-20  9

问题 编写函数int Fib_Res(int n),其功能是求Fibonacci数列F(n)中大于n的最小的一个数的值,结果由函数返回,其中Fibonacci数列F(n)的定义为;
    F(0)=0,F(1)=1
    F(n)=F(n-1)+F(n-2)
函数WriteData()负责把结果输出到OUT.DAT文件中。
例如;当n=1000时,函数值为1597。
注意;部分源程序已给出。
请勿改动主函数main()和写函数WriteData()的内容。
试题程序;
#include
#define DATA 1000
int Sol;
void WriteData();
int Fib Res(int n)
{
}
void main()
{
  int n;
  n=DATA;
  sol=Fib_Res(n);
  printf("n=%d,f=%d\n",n,sol);
  WriteData();
  }
  void WriteData()
  {
    FILE*OUt;
    out=fopen("OUT.DAT","w");
    fprintf(out,"f=%d\n",sol);
    fclose(out);
  }

选项

答案 int Fib_Res(int n) { int f1=0,f2=1,fn; //定义fn存储Fibonacci数,初始化数列的前两项f1、f2 fn=f1+f2; //计算后一项Fibonacci数 while(fn<=n)//如果当前的Fibonacci数不大于n,则继续计算下一个Fibonacci数 { f1=f2; f2=fn; fn=f1+f2; } return fn; }

解析 本题主要考查递归算法。根据已知数列可知;在Fibonacci数列中,从第3项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于n的最小的一个数”,因此可以借助一个while循环来依次求数列中的数,直到某一项的值大于n,那么这一项就是“大于n的最小的一个数”。
转载请注明原文地址:https://jikaoti.com/ti/48R7FFFM
0

最新回复(0)