首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >闭形式Fibonacci级数

闭形式Fibonacci级数
EN

Stack Overflow用户
提问于 2018-11-11 00:02:52
回答 2查看 1.7K关注 0票数 1

我使用Python创建了一个Fibonacci,它使用以下公式:

我有一个递归的Fibonacci函数:

代码语言:javascript
运行
复制
def recursive_fibonacci(n):
if n <= 1:
    return int((((1 / (5 ** 0.5)) * (1 + (5 ** 0.5))) ** n) - (((1 / (5 ** 0.5)) * (1 - (5 ** 0.5))) ** n))
else:
    return(recursive_fibonacci(n - 1) + recursive_fibonacci(n - 2))

为了显示它,我使用如下:

代码语言:javascript
运行
复制
nterms = 10

if nterms <= 0:
    print("Please Enter a positive integer")
else:
    print("Recursive Fibonacci Sequence: " ,
        [recursive_fibonacci(i) for i in range(nterms)])
    print("Iterative Fibonacci Sequence: " ,
        [iterative_fib(i) for i in range(nterms)])

如何使用这个Fibonacci的迭代函数?

我试过用这个:

代码语言:javascript
运行
复制
def iterative_fib(n):
    equation = lambda n: int((((1 / (5 ** 0.5)) * (1 + (5 ** 0.5))) ** n) - (((1 / (5 ** 0.5)) * (1 - (5 ** 0.5))) ** n))
    if n <= 1:
        return equation(n)
    else:
        a, b = 1, 2
        for i in range(n):
            fn = equation((i-a)+(i-b))
        return fn

但是,这个迭代函数似乎与递归函数没有相同的输出。

递归函数的输出:

代码语言:javascript
运行
复制
Recursive Fibonacci Sequence:  [0, 2, 2, 4, 6, 10, 16, 26, 42, 68]

迭代函数的输出:

代码语言:javascript
运行
复制
Iterative Fibonacci Sequence:  [0, 2, 2, 2, 3, 6, 13, 27, 58, 122]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-11 00:18:38

您要实现的等式是闭形 Fibonacci系列。

封闭形式意味着评估是一个固定的时间操作。

代码语言:javascript
运行
复制
g = (1 + 5**.5) / 2  # Golden ratio.
def fib(N):
    return int((g**N - (1-g)**N) / 5**.5)

与之相反,

代码语言:javascript
运行
复制
def fib_iterative(N):
    a, b, i = 0, 1, 2
    yield from (a, b)
    while i < N:
        a, b = b, a + b 
        yield b
        i += 1

我们有

代码语言:javascript
运行
复制
>>> [fib(n) for n in range(10)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
>>> list(fib_iterative(10))
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
票数 2
EN

Stack Overflow用户

发布于 2018-11-11 00:23:12

我认为您误解了您提到的斐波纳契序列的表达式f_n。

请注意,这不是一个重复关系。它是n的函数,即当给定n时,它提供第n项的值。

因此,您实际上没有一个递归/迭代解决方案来生成整个Fibonnaci序列。

插入n为0,1,2,3.提供0,1,1,2,.这个系列的。

为了说明,当n=3时,f_3计算为-

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53244630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档