我的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;
}
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);
}
这是用递归实现的,代码会简单很多,需要注意的是不同类型的变量的自