斐波那契数列的可视化
一、概述
本代码主要实现了斐波那契数列的计算,并对其进行可视化展示。斐波那契数列是一个经典的数学序列,其中每个数字是前两个数字的和,通常以 0 和 1 开始。代码中包含两种计算斐波那契数列的方法,一种是使用动态规划数组,另一种是优化后的空间复杂度为 O(1) 的方法。最后,使用 matplotlib
库将斐波那契数列进行可视化。
二、依赖库
本代码依赖于 matplotlib
库,它是一个用于绘制图表和可视化数据的 Python 库。使用前需要确保已经安装该库,可以使用以下命令进行安装:
收起
sh
pip install matplotlib
三、代码结构与函数说明
1. 导入库
收起
python
import matplotlib.pyplot as plt
导入 matplotlib.pyplot
库,并将其别名为 plt
,用于后续的绘图操作。
2. fib
函数
收起
python
def fib(n: int) -> int:
if n < 2:
return n
dp = [0] * (n + 1)
dp[0], dp[1] = 0, 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
- 功能:使用动态规划的方法计算斐波那契数列的第
n
项。 - 参数:
n
:整数类型,表示要计算的斐波那契数列的项数。
- 返回值:整数类型,斐波那契数列的第
n
项的值。 - 实现思路:
- 当
n
小于 2 时,直接返回n
,因为斐波那契数列的前两项分别是 0 和 1。 - 创建一个长度为
n + 1
的数组dp
,用于存储斐波那契数列的每一项。 - 初始化
dp[0]
为 0,dp[1]
为 1。 - 通过循环从第 2 项开始,根据斐波那契数列的定义
dp[i] = dp[i - 1] + dp[i - 2]
计算每一项的值。 - 最后返回
dp[n]
,即第n
项的值。
- 当
3. fib_optimized
函数
收起
python
def fib_optimized(n: int) -> int:
if n < 2:
return n
a, b = 0, 1
for _ in range(2, n + 1):
a, b = b, a + b
return b
- 功能:使用优化后的方法计算斐波那契数列的第
n
项,空间复杂度为 O(1)。 - 参数:
n
:整数类型,表示要计算的斐波那契数列的项数。
- 返回值:整数类型,斐波那契数列的第
n
项的值。 - 实现思路:
- 当
n
小于 2 时,直接返回n
。 - 使用两个变量
a
和b
分别存储斐波那契数列的前两项,初始值分别为 0 和 1。 - 通过循环从第 2 项开始,不断更新
a
和b
的值,使得a
存储当前项的前一项,b
存储当前项。 - 最后返回
b
,即第n
项的值。
- 当
4. plot_fibonacci
函数
收起
python
def plot_fibonacci(n: int):
x = list(range(n + 1)) # x轴:n的值
y = [fib(i) for i in x] # y轴:斐波那契数列的值
plt.plot(x, y, marker='o', linestyle='-', color='b', label='Fibonacci Sequence')
plt.title('Fibonacci Sequence Visualization')
plt.xlabel('n')
plt.ylabel('Fibonacci Value')
plt.grid(True)
plt.legend()
plt.show()
- 功能:绘制斐波那契数列的可视化图表。
- 参数:
n
:整数类型,表示要绘制的斐波那契数列的项数。
- 返回值:无
- 实现思路:
- 创建一个列表
x
,包含从 0 到n
的整数,作为图表的 x 轴数据。 - 使用列表推导式生成一个列表
y
,其中每个元素是斐波那契数列的对应项的值,作为图表的 y 轴数据。 - 使用
plt.plot
函数绘制折线图,设置标记点为圆形,线条样式为实线,颜色为蓝色,并添加图例标签。 - 设置图表的标题、x 轴标签和 y 轴标签。
- 开启网格线,显示图例。
- 使用
plt.show
函数显示图表。
- 创建一个列表
5. 示例调用
收起
python
# 示例:绘制n=10的斐波那契数列
plot_fibonacci(10)
调用 plot_fibonacci
函数,绘制斐波那契数列前 10 项的可视化图表。
四、注意事项
- 在使用
plot_fibonacci
函数时,输入的n
值不宜过大,否则可能会导致计算时间过长或图表显示效果不佳。 - 代码中的
fib
函数使用了动态规划数组,空间复杂度为 O(n);fib_optimized
函数使用了优化后的方法,空间复杂度为 O(1),在计算较大的n
值时,建议使用fib_optimized
函数。
五、总结
本代码通过不同的方法实现了斐波那契数列的计算,并使用 matplotlib
库将其进行可视化展示。用户可以根据需要修改 n
的值,绘制不同长度的斐波那契数列图表。同时,代码中提供了两种计算斐波那契数列的方法,用户可以根据实际情况选择合适的方法。
import matplotlib.pyplot as plt
def fib(n: int) -> int:
if n < 2:
return n
dp = [0] * (n + 1)
dp[0], dp[1] = 0, 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
def fib_optimized(n: int) -> int:
if n < 2:
return n
a, b = 0, 1
for _ in range(2, n + 1):
a, b = b, a + b
return b
def plot_fibonacci(n: int):
x = list(range(n + 1)) # x轴:n的值
y = [fib(i) for i in x] # y轴:斐波那契数列的值
plt.plot(x, y, marker='o', linestyle='-', color='b', label='Fibonacci Sequence')
plt.title('Fibonacci Sequence Visualization')
plt.xlabel('n')
plt.ylabel('Fibonacci Value')
plt.grid(True)
plt.legend()
plt.show()
# 示例:绘制n=10的斐波那契数列
plot_fibonacci(10)