编写函数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)

admin2020-12-17  56

问题 编写函数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 fl=0,f2=1,fn; //定义fn存储Fibonacci数,初始化数列的前两项 f1、f2 fn=f1+f2;//计算后一项Fibonacei数 while(fn<=n) //如果当前的Fibonacei数不大于n,则继续计算下 一个Fibonaeei数 { f1=f2; f2=fn; fn=f1+f2; } return fn; }

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

最新回复(0)