所以,我正在写这篇文章来解决这个问题。
斐波那契数列中的每个新术语都是通过将前两个术语相加而生成的。从1和2开始,前10个术语将是:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
通过考虑斐波那契数列中值不超过400万的项,找到偶值项的总和。
这是我的代码。
这需要花很长时间才能计算,即使在十五分钟之内也没有给出答案,我如何有效地计算呢?
答案 0 :(得分:0)
让我们一步一步地分解它。显然,斐波那契数列有一个偶数夹在2个不同的奇数之间。
考虑序列的前几个元素。
1, 2 ,3、5, 8
在这种情况下,让我们关注前两个数字(1, 2)
和后两个数字(5, 8)
。这里的5、8可以写为((1+2)*1+2, (1+2)*2+2)
。
如果o
,p
是两个连续的斐波那契数列,则进行归纳;这样p
是偶数。令O+P
为S
。那么接下来的两个连续数字,使得第二个数字为偶数(S+P, 2S+P)
。
利用这些知识,我们可以编写一个简单的函数
def return_next_fib_pair(odd_num, even_num):
sum_in_consideration = odd_num + even_num
return(sum_in_consideration + even_num, sum_in_consideration*2 + even_num)
现在调用函数,直到(sum_in_consideration*2 + even_num)
小于400万。
在此之前,添加所有值(sum_in_consideration*2 + even_num)
。
输出它们的总和!
实际代码:
def return_next_fib_pair(odd_num, even_num):
sum_in_consideration = odd_num + even_num
return(sum_in_consideration + even_num,
sum_in_consideration*2 + even_num)
fib_1 = 1
fib_2 = 2
sum_of_even_fib = 0
target_fibonnaci_ceiling = 1000
while(fib_2 < target_fibonnaci_ceiling):
sum_of_even_fib = sum_of_even_fib + fib_2
fib_1, fib_2 = return_next_fib_pair(fib_1, fib_2)
print("The sum of all even fibonacci numbers upto",
target_fibonnaci_ceiling, "is:", sum_of_even_fib)
但是,最快的方法不是上述方法。具有O(1)复杂度的最快方法如下:
Fib(n)= [{(√5+ 1)/ 2} ^ n] /√5
其中Fib(n)是第n个斐波那契数。
进一步使斐波那契数为偶数,n必须是三的倍数。
因此,解决您的问题的方法是找到
ΣRound(Fib(n)) where (n%3 ==0) && (n < 4000000)