C++程序 查找斐波那契数列偶数项之和

C++程序 查找斐波那契数列偶数项之和

给定一个正整数N,任务是找到F2 + F4 + F6 + …… + F2n的值,其中Fi表示第i个斐波那契数。

斐波那契数列是以下整数序列中的数字。

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ……

示例:

输入: n = 5

输出: 88

N = 5,因此将生成从零项到第十项的斐波那契数列:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55

在偶数项处的元素之和=0 + 1 + 3 + 8 + 21 + 55

输入: n = 8

输出: 1596

0 + 1 + 3 + 8 + 21 + 55 + 144 + 377 + 987 = 1596

方法-1: 此方法通过直接找到所有斐波那契数,然后只从偶数索引中加总。但它需要O(n)的时间复杂度。
下面是以上方法的实施:

// C++程序查找偶数项斐波那契数列之和
#include <bits/stdc++.h>
using namespace std;
 
// 计算前n个斐波那契数并将偶数索引的和存储起来
int calculateEvenSum(int n)
{
    if (n <= 0)
        return 0;
 
    int fibo[2 * n + 1];
    fibo[0] = 0, fibo[1] = 1;
 
    // 初始化结果
    int sum = 0;
 
    // 添加剩余的项
    for (int i = 2; i <= 2 * n; i++)
    {
        fibo[i] = fibo[i - 1] + fibo[i - 2];
 
        // 对于偶数索引
        if (i % 2 == 0)
            sum += fibo[i];
    }
 
    // 返回交替和
    return sum;
}
 
// 主函数
int main()
{
 
    // 获取n
    int n = 8;
 
    // 找到偶数索引总和
    cout << "Even indexed Fibonacci Sum upto " <<
             n << " terms: " << calculateEvenSum(n) <<
             endl;
 
    return 0;
}  

输出:

Even indexed Fibonacci Sum upto 8 terms: 1596

时间复杂度: O(N).

辅助空间: O(N).

方法-2:

可以清楚地看到,可以这样得到所需求的和:

2 ( F 2 + F 4 + F 6 +………+ F 2n ) = (F 1 + F 2 + F 3 + F 4 +………+ F 2n ) – (F 1 – F 2 + F 3 – F 4 +………+ F 2n )

现在可以将公式中的 n 替换为 2n 以得到第一项。

因此 F 1 + F 2 + F 3 + F 4 +………+ F 2n = F 2n+2 – 1。

如果将公式中的 n 替换为 2n,则可以找到第二项。

因此,F 1 – F 2 + F 3 – F 4 +………- F 2n = 1 + (-1) 2n+1 F 2n-1 = 1 – F 2n-1 。

因此,2 ( F 2 + F 4 + F 6 +………+ F 2n )

= F 2n+2 – 1 – 1 + F 2n-1

= F 2n+2 + F 2n-1 – 2

= F 2n + F 2n+1 + F 2n+1 – F 2n – 2

= 2 ( F 2n+1 -1)

因此,( F 2 + F 4 + F 6

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例