来自projecteuler.net网站的练习题2
0.题目如下:
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
1.先理解什么是斐波那契数列:
一、百度说法:
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
二、个人理解:
前两位之和等于第三位。这就是斐波那契数列
2.怎么获取呢?(直接点击链接查看具体代码)
方法一、可以利用递归, 通过这个等式来实现F(n)=F(n-1)+F(n-2),但是效率低下。
3.至于用哪种方法呢?自己根据不同情况来选择。
4.以下为代码:
这里我选择了方法二,目的是高效解决练习题。
def main(): num = [1, 2] result = 2 while 1: #循环的内容就是将小于400万的斐波那契的偶数相加 x = num[-1] + num[-2]#斐波那契数列最后两位进行相加,等于下一个斐波那契数 if x < 4000000: num.append(x)#将下一个斐波那契数加入到列表中 if x % 2 == 0:#判断是不是偶数 result = result + x#将所有偶数相加 else: break#下一个斐波那契数大于400万就跳出循环 return result if __name__ == '__main__': print(main())