C语言的黄金比例?
Golden Ratio in C?
我用 C 语言编写了这段代码来计算斐波那契数列的黄金比例,但程序在屏幕上没有任何输出。我不明白我的逻辑出了什么问题。
能解释一下吗?
如有任何帮助,我们将不胜感激。
int fibonacci (int n){
if (n==0 || n==1)
return n;
else
return fibonacci(n-1)+fibonacci(n-2);
}
double fibonacci_golden_ratio(int n){
double phi;
phi = fibonacci(n)/fibonacci(n-1);
return phi;
}
int main(){
int i;
for (i=1;;i++){
printf ("F = %d ",fibonacci(i));
printf ("phi = %.5lf \n", fibonacci_golden_ratio(i));
if ( fabs (fibonacci_golden_ratio(i) - fibonacci_golden_ratio(i-1)) < 0.0001 )
break;
}
printf ("phi = %.5lf\n", fibonacci_golden_ratio(i));
return 0;
}
您正在执行整数除法:
phi = fibonacci(n)/fibonacci(n-1);
(as fibonnacci
returns an int
),要进行浮点除法,将语句更改为:
phi = fibonacci(n) / (double) fibonacci(n-1);
此外,您必须从 i = 2
开始循环,即
for (i=2;;i++){
而不是:
for (i=1;;i++){
as fibonacci_golden_ratio(i-1)
将计算 phi = fibonacci(0) / (double) fibonacci(-1);
如果您调用 fibonacci_golden_ratio(0)
,那么它会调用 fibonacci(-1)
,这将永远循环。
我用 C 语言编写了这段代码来计算斐波那契数列的黄金比例,但程序在屏幕上没有任何输出。我不明白我的逻辑出了什么问题。
能解释一下吗?
如有任何帮助,我们将不胜感激。
int fibonacci (int n){
if (n==0 || n==1)
return n;
else
return fibonacci(n-1)+fibonacci(n-2);
}
double fibonacci_golden_ratio(int n){
double phi;
phi = fibonacci(n)/fibonacci(n-1);
return phi;
}
int main(){
int i;
for (i=1;;i++){
printf ("F = %d ",fibonacci(i));
printf ("phi = %.5lf \n", fibonacci_golden_ratio(i));
if ( fabs (fibonacci_golden_ratio(i) - fibonacci_golden_ratio(i-1)) < 0.0001 )
break;
}
printf ("phi = %.5lf\n", fibonacci_golden_ratio(i));
return 0;
}
您正在执行整数除法:
phi = fibonacci(n)/fibonacci(n-1);
(as fibonnacci
returns an int
),要进行浮点除法,将语句更改为:
phi = fibonacci(n) / (double) fibonacci(n-1);
此外,您必须从 i = 2
开始循环,即
for (i=2;;i++){
而不是:
for (i=1;;i++){
as fibonacci_golden_ratio(i-1)
将计算 phi = fibonacci(0) / (double) fibonacci(-1);
如果您调用 fibonacci_golden_ratio(0)
,那么它会调用 fibonacci(-1)
,这将永远循环。