Python 中的斐波那契数列
Manav Narula
2023年1月30日
- 在 Python 中使用数学公式创建斐波那契数列
-
在 Python 中使用
for
循环创建斐波那契数列 - 在 Python 中使用递归函数创建斐波那契序列
- 在 Python 中使用动态编程方法创建斐波那契序列
斐波那契数列是数学中一个常见且经常使用的序列。如下所示。
0,1,1,2,3,5,8,13,21,34,55,89,144,229....
斐波那契数列中的下一个数字是前两个数字的和,可以用数学方式显示为 Fn = Fn-1 + Fn-2
。
系列的第一个和第二个元素分别是 0 和 1。
在本教程中,我们将讨论如何在 Python 中创建这样的序列。
在 Python 中使用数学公式创建斐波那契数列
斐波那契数列中的每个元素都可以使用以下数学公式表示。
我们可以在 Python 中实现此公式,以找到序列,直到所需的数字,并打印序列。请参考以下的代码。
from math import sqrt
def F(n):
return ((1 + sqrt(5)) ** n - (1 - sqrt(5)) ** n) / (2 ** n * sqrt(5))
def Fibonacci(startNumber, endNumber):
n = 0
cur = F(n)
while cur <= endNumber:
if startNumber <= cur:
print(cur)
n += 1
cur = F(n)
Fibonacci(1, 100)
输出:
1.0
1.0
2.0
3.0000000000000004
5.000000000000001
8.000000000000002
13.000000000000002
21.000000000000004
34.00000000000001
55.000000000000014
89.00000000000003
Fibonacci()
函数用于计算序列中某个位置的斐波那契数。
在 Python 中使用 for
循环创建斐波那契数列
我们将使用 for
循环创建一个函数以实现所需的序列。在这种方法中,我们将打印所需长度的序列。我们将仅使用 for
循环来迭代所需的长度,并在每次迭代时更改所需的变量。下面的代码解释了如何操作。
def fibonacci_iter(n):
a = 1
b = 1
if n == 1:
print("0")
elif n == 2:
print("0", "1")
else:
print("0")
print(a)
print(b)
for i in range(n - 3):
total = a + b
b = a
a = total
print(total)
fibonacci_iter(8)
输出:
0
1
1
2
3
5
8
13
在 Python 中使用递归函数创建斐波那契序列
递归函数是一个调用自身的函数,此类方法可以减少时间复杂度,但使用更多的内存。我们可以创建一个函数来返回斐波那契数,并使用 for
循环打印所需的序列。
例如,
def rec_fib(n):
if n > 1:
return rec_fib(n - 1) + rec_fib(n - 2)
return n
for i in range(10):
print(rec_fib(i))
输出:
0
1
1
2
3
5
8
13
21
34
在 Python 中使用动态编程方法创建斐波那契序列
动态编程是一种将问题分为子问题并存储这些子问题的值以找到解决方案的方法。此方法通常用于优化问题,可用于生成斐波那契数列,如下所示:
def fibonacci(num):
arr = [0, 1]
if num == 1:
print("0")
elif num == 2:
print("[0,", "1]")
else:
while len(arr) < num:
arr.append(0)
if num == 0 or num == 1:
return 1
else:
arr[0] = 0
arr[1] = 1
for i in range(2, num):
arr[i] = arr[i - 1] + arr[i - 2]
print(arr)
fibonacci(10)
输出:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
请注意,此方法将序列存储在数组中。
作者: Manav Narula
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn