封闭式斐波那契数列
Closed form Fibonacci Series
我正在使用 Python 使用以下公式创建斐波那契数列:
我有这个递归斐波那契函数:
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))
为了显示它,我使用了这个:
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)])
我如何使用这个斐波那契数列的迭代函数?
我试过使用这个:
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
然而,这个迭代函数似乎没有与递归函数相同的输出。
递归函数的输出:
Recursive Fibonacci Sequence: [0, 2, 2, 4, 6, 10, 16, 26, 42, 68]
迭代函数的输出:
Iterative Fibonacci Sequence: [0, 2, 2, 2, 3, 6, 13, 27, 58, 122]
您要实现的方程是 closed form 斐波那契数列。
闭合形式表示求值是常数时间操作。
g = (1 + 5**.5) / 2 # Golden ratio.
def fib(N):
return int((g**N - (1-g)**N) / 5**.5)
对比,
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
我们有
>>> [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]
我认为您误解了您提到的斐波那契数列的表达式 f_n。
注意不是递归关系。它是 n 的函数,即当给定 n[= 时,它提供第 n 项的值27=].
因此,您确实没有 recursive/iterative 解决方案来生成整个斐波纳契数列。
插入 n 作为 0、1、2、3.. 提供系列的项 0、1、1、2、..。
为了说明,当n = 3时,f_3计算为-
我正在使用 Python 使用以下公式创建斐波那契数列:
我有这个递归斐波那契函数:
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))
为了显示它,我使用了这个:
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)])
我如何使用这个斐波那契数列的迭代函数?
我试过使用这个:
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
然而,这个迭代函数似乎没有与递归函数相同的输出。
递归函数的输出:
Recursive Fibonacci Sequence: [0, 2, 2, 4, 6, 10, 16, 26, 42, 68]
迭代函数的输出:
Iterative Fibonacci Sequence: [0, 2, 2, 2, 3, 6, 13, 27, 58, 122]
您要实现的方程是 closed form 斐波那契数列。
闭合形式表示求值是常数时间操作。
g = (1 + 5**.5) / 2 # Golden ratio.
def fib(N):
return int((g**N - (1-g)**N) / 5**.5)
对比,
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
我们有
>>> [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]
我认为您误解了您提到的斐波那契数列的表达式 f_n。
注意不是递归关系。它是 n 的函数,即当给定 n[= 时,它提供第 n 项的值27=].
因此,您确实没有 recursive/iterative 解决方案来生成整个斐波纳契数列。
插入 n 作为 0、1、2、3.. 提供系列的项 0、1、1、2、..。
为了说明,当n = 3时,f_3计算为-