来自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())

 

posted @ 2017-09-21 13:08  人生入戏  阅读(185)  评论(0编辑  收藏  举报