C中的黄金比例?

问题描述 投票:3回答:2

我已经用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;
}
c fibonacci
2个回答
7
投票

您正在这里执行整数除法:

phi = fibonacci(n)/fibonacci(n-1);

((因为fibonnacci返回int),要进行浮点除法,请将语句更改为:

phi = fibonacci(n) / (double) fibonacci(n-1);

此外,您必须以i = 2,即]开始循环>

 for (i=2;;i++){

而不是:

 for (i=1;;i++){

因为fibonacci_golden_ratio(i-1)将计算phi = fibonacci(0) / (double) fibonacci(-1);


0
投票

如果您呼叫fibonacci_golden_ratio(0),它将呼叫将永远循环的fibonacci(-1)

© www.soinside.com 2019 - 2024. All rights reserved.