0
点赞
收藏
分享

微信扫一扫

实例024

hwwjian 2022-04-04 阅读 37
c语言

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

程序分析:请抓住分子与分母的变化规律。

#include <stdio.h>

int main()
{
    int i, t;
    float sum = 0;
    float a = 2, b = 1;
    for (i = 1; i <= 20; i++)
    {
        sum = sum + a / b;
        t = a;
        a = a + b;
        b = t;
    }
    printf("%9.6f\n", sum);
}


由规律可以看出,这其实是一个斐波那契数列的除法,我们可以直接用递归写一个斐波那契的通项。然后在求和。
//int Fibonacci(int a, int b, int n)
//{
//    if (n < 0)
//    {
//        return 0;
//    }
//    else if (n == 1)
//    {
//        return 1;
//    }
//    else if (n == 2)
//    {
//        return b;
//    }
//    else
//    {
//        return Fibonacci(b, a + b, n - 1);
//    }
//}
//
//int main(void)
//{
//    float sum = 0;
//    int i;
//    for (i = 2; i < 22; i++)
//    {
//        float son = Fibonacci(1, 1, i + 1);
//        float mother = Fibonacci(1, 1, i);
//        // 这里不能直接用Fibonacci(1,1,i+1)/Fibonacci(1,1,i),不定义类型会返回一个整除的值,导致结果有误,这是个坑。
//        sum = sum + son / mother;
//        printf("%d/%d\n", Fibonacci(1, 1, i + 1), Fibonacci(1, 1, i));
//    }
//    printf("求和得 %9.6f", sum);
//    return 0;
//}
举报

相关推荐

0 条评论