请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为 F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 例如:t=1000时,函数值为9

admin2009-02-15  41

问题 请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为
   F(0)=0,F(1)=1
   F(n)=F(n-1)+F(n-2)
   例如:t=1000时,函数值为987。
   注意:部分源程序给出如下。
   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
   试题程序:
   #include  <conio.h>
   #include  <math.h>
   #include  <stdio.h>
   int fun(int t)
   {
   }
   main()
   {
   int  n;
   clrscr();
   n=1000;
   printf("n=%d,  f=%d\n",n,  fun(n));
}

选项

答案int fun(int t) { int a=1,b=1,c=0,i; /*a代表第n-2项,b代表第n-1项,c代表第n项*/ /*如果求得的数。比指定比较的数小,则计算下一个Fibonacci数,对a,b得新置数*/ do { c=a+b; a=b; b=c; } while(c<t); /*如果求得的数c比指定比较的数大时,退出循环*/ c=a; /*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/ return c; }

解析 根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把c看成是前两项之和(即第n项),而a始终代表第n-2项,b始终代表第n-1项(通过不断地重新赋值来实现)。应注意,退出循环时得到的数c是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。
转载请注明原文地址:https://kaotiyun.com/show/vTID777K
0

最新回复(0)