【问题标题】:Golden Ratio in C?C中的黄金比例?
【发布时间】:2015-12-19 18:01:57
【问题描述】:

我用 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;
}

【问题讨论】:

  • 什么都不输出是什么意思?
  • 它只编译和写入 F=1
  • 尝试添加一个全局 count 变量,在每次调用 fibonacci 时将其递增,并打印其最终值。当我运行它时,我收到了 11438 个电话。如果您记住较低的值,则可以非常有效地计算斐波那契数;您重复地重新计算它们,然后在fibonacci_golden_ratio 中调用fibonnaci() 两次,然后在循环的每次迭代中调用fibonacci_golden_ratio 四次。它有效,但效率可能会很多

标签: c fibonacci


【解决方案1】:

你在这里执行整数除法:

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);

【讨论】:

    【解决方案2】:

    如果你调用fibonacci_golden_ratio(0),那么它将调用fibonacci(-1),这将永远循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      相关资源
      最近更新 更多