在这个问题中,我们得到一个整数 N。我们的任务是找到第 N 个偶数斐波那契数。
斐波那契数列通过添加两个先前的数字来生成后续数字。斐波那契数列从两个数字开始 - F0 和 F1。F0 和 F1 的初始值可以分别取 0, 1 或 1, 1。
让我们举个例子来理解这个问题,
Input : N = 4 Output : 144
该问题的一个简单解决方案是利用斐波那契数列中每隔三个数为偶数的事实,并且偶数序列也遵循递归公式。
甚至斐波那契数列的递归公式是 -
Ef(n)= 4Ef(n-1) + Ef(n-2) 其中 Ef(0)=0 且 Ef(1)=2
我们知道每三个斐波那契数都是偶数,因此 f(n-3) 和 f(n-6) 都是偶数。因此,我们将考虑f(n)作为第 k 个元素并表示为Ef(k)。如果f(n)是Ef(k),则 f(n-3) 是由 Ef(k-1) 表示的前一个偶数,因此 f(n-6) 是 Ef(k-1) 的前一个,即 Ef(k-2)。
因此f(n)=4f(n-3)+f(n-6)
或者,Ef(k)=4Ef(k-1) + Ef(k-2)。
程序来说明我们的解决方案的工作原理,
#include<iostream> using namespace std; int findNthEvenFiboNum(int n){ if (n < 1) return n; if (n == 1) return 2; return ((4 * findNthEvenFiboNum(n-1)) + findNthEvenFiboNum(n- 2)); } int main (){ int n = 5; cout<<n<<"th 偶数斐波那契数是 "<<findNthEvenFiboNum(n); return 0; }输出结果
5th 偶数斐波那契数是 610