栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python

将Fib序列公式写成无穷大
在数学中,它以递归形式给出:

在编程中,不存在无限。你可以使用递归形式直接用你的语言翻译数学形式,例如在Python中,它将变为:

def F(n):    if n == 0: return 0    elif n == 1: return 1    else: return F(n-1)+F(n-2)

用你喜欢的语言尝试一下,随着n变大,这种形式需要很多时间。实际上,这是时间O(2 n)。

继续在我链接到你的网站上,将看到此信息(在Wolfram上):

斐波那契方程

这是一个非常容易实现并且非常非常快速的Python代码:

from math import sqrtdef F(n):    return ((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))

另一种方法是遵循定义(来自Wikipedia):

序列的第一个数字为0,第二个数字为1,每个后续数字等于序列本身前两个数字的和,得出序列0、1、1、2、3、5、8等

如果你的语言支持迭代器,则可以执行以下操作:

def F():    a,b = 0,1    while True:        yield a        a, b = b, a + b

仅从Fib序列显示startNumber到endNumber。
一旦知道了如何生成斐波那契数,你只需循环遍历数字并检查它们是否验证了给定条件。

假设现在你编写了af(n)来返回斐波那契数列的第n个项(如带有sqrt(5)的项)

在大多数语言中,你可以执行以下操作:

def SubFib(startNumber, endNumber):    n = 0    cur = f(n)    while cur <= endNumber:        if startNumber <= cur: print cur        n += 1        cur = f(n)

在python中,我将使用迭代器形式并进行以下操作:

def SubFib(startNumber, endNumber):    for cur in F():        if cur > endNumber: return        if cur >= startNumber: yield curfor i in SubFib(10, 200):    print i

我的提示是学习阅读所需内容。欧拉计画(google for Euler)将会训练你这样做:P祝你好运,玩得开心!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383163.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号