问答详情
源自:5-8 递归函数(二)

老哥们,这个哪里错了

/*请编写函数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;
}


提问者:丁家奎 2018-04-13 21:29

个回答

  • Atom无处可去
    2018-04-15 14:23:12

    这是编写一个函数的方法:

    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;

    }