我的C语言答案改错

来源:百度知道 编辑:UC知道 时间:2024/06/01 08:08:43
下面是题目,还有我写的答案,不知道对不对,请各位高手改正,如果是对的话就怎么把写才能把代码好看点..?

F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)

phi=(1+sqrt(5))/2

F(n)/F(n-1)会无限趋近于phi

当n递增时

求n为什么时,F(n)/F(n-1)-phi比10的负6次方小!

答案:
#include<stdio.h>
#include<math.h>
double F(double n);
void main()
{
double phi,po,Fp,n=1,Fn;

phi=(1+sqrt(5))/2;

po=pow(10,-6);

Fn=F(n)/F(n-1);

Fp=Fn-phi; // F(n)/F(n-1)-phi

while(Fp >= po)
{
n++;

printf("n为%f时,F(n)/F(n-1)-phi比10的负6次方小!\n",n);
}

}
double F(double n)
{
double temp;
temp = (n-1)+(n-2); // F(n)=F(n-1)+F(n-2)
return temp;
}

#include<stdio.h>
#include<math.h>

void main()
{
double phi,f1,f2,f;
unsigned int n;
phi=(1.0+sqrt(5))/2.0;

f1=0; f2=1;
for(n=2;;n++)
{ f=f1+f2;
f1=f2;
f2=f;
if(fabs((f+0.0)/f2-phi)<0.000001)
{
printf("n为%u时,F(n)/F(n-1)-phi比10的负6次方小!\n",n);
break;
}

}

}

不好意思,昨天弄错了最初的n值,应该是2。
结果n为1477。

对于写好程序,主要是算法,很重要。比如人家用三行就可以完成你几百行的任务。除了算法,就是语法了(多写程序就可以)。 如果你不想学得很深,算法就没必要去特异的学。

#include <stdio.h>
#include <math.h>
double f(int n)
{
if(n==1) return 1;
else if(n==0) return 0;
else return f(n-1)+f(n-2);
}
void main()
{
int n;
double phi;
phi=(1+sqrt(5))/2;
for (n=2;fabs(f(n)/f(n-1)-phi)>1e-6;n++);
printf("n为%d时,f(n)/f(n-1)-phi比10的负6次方小!\n",n);
}

这是用递归实现的,代码会简单很多,需要注意的是不同类型的变量的自