c语言求斐波拉契数列在第几项之后,前项除以后项商稳定在0.618

img


就是这个图片的流程图,如果还有什么不了解的 我会给你们回答,弄了半天弄不出来


#include<stdio.h>
#include<math.h>
int main()
{
    int a[100]; //定义100个整型元素数组a
    int i;  // 整型循环控制变量i
    int n;  // 所求整型变量n
    double absDiff; // 所求浮点型差值变量absDiff
    a[0] = 1; 
    a[1] = 1;
    i = 2;
    while(i<=99){
        a[i] = a[i-1]+a[i-2];
        i++;
    }
    n = 0;
    do{
         n++;
        absDiff = fabs((a[n-1]*1.0/a[n])-(a[n]*1.0/a[n+1]));
    }while(absDiff > 0.0001);
    printf("n=%d\n",n);
    return 0;
}

完全按照你的流程图写的,望采纳

引用 皆我百晓生 小程序回复内容作答:

img

要求斐波那契数列的前一项除以后一项的商稳定在0.618,即 (a[i-1] / a[i]) = 0.618。

斐波那契数列的递推关系为:a[i] = a[i-1] + a[i-2],其中a[0]=0,a[1]=1。

我们可以使用循环来计算斐波那契数列,并判断每一项是否满足条件。

#include <stdio.h>

int main() {
    int a = 0; // 第一项
    int b = 1; // 第二项
    int i = 2; // 当前项的索引

    while (1) {
        int temp = a; // 保存前一项的值
        a = b; // 当前项成为新的前一项
        b = temp + b; // 计算新的当前项

        double ratio = (double)a / b;
        if (ratio >= 0.617 && ratio <= 0.619) {
            printf("前一项除以后一项的商稳定在0.618在斐波那契数列的第 %d 项\n", i);
            break;
        }

        i++;
    }

    return 0;
}

这段代码会找到斐波那契数列中前一项除以后一项的商稳定在0.618的项数,然后输出结果。

请注意,斐波那契数列的项数是从1开始计数的,所以结果中的项数会比实际项数多1。


#include <stdio.h>

int main() {
    double goldenRatio = 0.618; // 黄金比例
    int n;
    
    // 计算斐波那契数列
    unsigned long long fib1 = 0; // 前一项
    unsigned long long fib2 = 1; // 当前项
    
    for (n = 1; ; n++) {
        // 计算下一项
        unsigned long long fibNext = fib1 + fib2;
        
        // 检查前一项除以当前项的商是否接近黄金比例
        double ratio = (double)fib1 / fib2;
        if (ratio >= goldenRatio * 0.999 && ratio <= goldenRatio * 1.001) {
            printf("在第 %d 项之后,前一项除以当前项的商稳定在 %.3f\n", n, goldenRatio);
            break;
        }
        
        // 更新前一项和当前项
        fib1 = fib2;
        fib2 = fibNext;
    }
    
    return 0;
}

改改参数应该没问题

是这个意思不

#include <stdio.h>

int main() {
    double goldenRatio = 0.618; // 黄金比例
    int n;

    // 初始化斐波那契数列的前两项
    unsigned long long a[100];
    a[0] = 1;
    a[1] = 1;

    // 计算斐波那契数列
    for (n = 2; n < 100; n++) {
        a[n] = a[n - 1] + a[n - 2];
        
        // 计算前一项除以当前项的差值
        double absDiff = (double)a[n - 1] / a[n] - goldenRatio;
        if (absDiff >= -0.0001 && absDiff <= 0.0001) {
            printf("在第 %d 项之后,前一项除以当前项的商稳定在 %.3f\n", n, goldenRatio);
            break;
        }
    }

    return 0;
}


该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
找到斐波那契数列中满足前一项除以后一项等于黄金比例0.618的项。以下具体的代码:

#include <stdio.h>
#include <math.h>
 
int main() {
    int a[100]; // 定义长度为100的数组a
    a[0] = 1; // 数组第一个元素为1
    a[1] = 1; // 数组第二个元素也为1
    int n = 2; // 初始化n为2,即从第三项开始计算
    double goldenRatio = 0.618; // 黄金比例
    double absDiff = fabs((double) a[n-1] / a[n-2] - goldenRatio); // 初始化差值
    
    // 计算斐波那契数列,直到找到符合要求的项
    while (absDiff > 0.0001 && n < 100) {
        a[n] = a[n-1] + a[n-2];
        n++;
        absDiff = fabs((double) a[n-1] / a[n-2] - goldenRatio);
    }
    
    // 输出结果
    if (n >= 100) {
        printf("未找到符合要求的项
");
    } else {
        printf("第%d项满足条件
", n);
    }
    
    return 0;
}

这段代码将计算斐波那契数列,直到找到满足前一项除以后一项等于黄金比例0.618的项。如果找到了这样的项,将输出该项的位置;如果没有找到,将输出“未找到符合要求的项”。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

引用文心一言以及个人思考,作答:
对于斐波那契数列,有一个特性是:除以前一项的商会逐渐接近黄金分割比,也就是0.618。但是要注意,这个比值并不会稳定在0.618,而是会无限接近,永远不会达到。

以下是一个C语言程序,用于计算斐波那契数列并打印出前项除以后项的商。你可以通过这个程序来观察这个比值如何逐渐接近0.618。

#include <stdio.h>  
  
int fibonacci(int n) {  
    if (n <= 0) {  
        return 0;  
    } else if (n == 1 || n == 2) {  
        return 1;  
    } else {  
        return fibonacci(n - 1) + fibonacci(n - 2);  
    }  
}  
  
int main() {  
    int i;  
    double ratio;  
    for (i = 2; i <= 30; i++) {  
        ratio = (double)fibonacci(i) / fibonacci(i - 1);  
        printf("The ratio for position %d is %.3f\n", i, ratio);  
    }  
    return 0;  
}

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

#define Max 100

int main(void) {

int a[Max];
int i, n;
double absDiff;

i = 2;

a[0] = 1;
a[1] = 1;

for (i; i <=99; i++)
{
    a[i] = a[i - 1] + a[i - 2];
}
n = 0;
do
{
    ++n;
    absDiff = fabs((a[n - 1]*(1.0) / a[n]) - (a[n]*(1.0) / a[n + 1]));
} while (absDiff > 0.0001);

printf("n=%d\n", n);

return 0;

}

#include <stdio.h>

int main() {
    double golden_ratio = 0.618; // 黄金比例
    double epsilon = 0.0001;     // 容忍度

    int n = 2; // 从第三项开始计算
    double Fn_minus_2 = 1; // F(1)
    double Fn_minus_1 = 1; // F(2)
    double Fn = 2;         // F(3)

    while (1) {
        Fn = Fn_minus_1 + Fn_minus_2;
        Fn_minus_2 = Fn_minus_1;
        Fn_minus_1 = Fn;

        double ratio = Fn_minus_1 / Fn_minus_2;

        if (ratio >= golden_ratio - epsilon && ratio <= golden_ratio + epsilon) {
            // 找到满足条件的项
            printf("在第 %d 项之后,前项除以后项的商稳定在约 %.3lf\n", n - 1, ratio);
            break;
        }

        n++;
    }

    return 0;
}

试一下看看是否可以用