以下是 Python 中输出斐波那契数列的多种实现方式,根据不同的需求选择合适的方法:
1. 输出前 N 项(基础迭代法)
def print_fibonacci(n):
"""输出前n项斐波那契数列(从0开始)"""
a, b = 0, 1
for _ in range(n):
print(a, end=' ')
a, b = b, a + b
# 示例:输出前10项
print_fibonacci(10) # 输出: 0 1 1 2 3 5 8 13 21 34
2. 返回列表形式(存储所有项)
def get_fibonacci_list(n):
"""返回前n项的列表"""
fib = [0, 1]
for i in range(2, n):
fib.append(fib[i-1] + fib[i-2])
return fib[:n] # 处理n=0或1的情况
# 示例
print(get_fibonacci_list(10)) # 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
3. 生成器实现(惰性生成无限序列)
def fibonacci_generator():
"""无限生成斐波那契数列"""
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# 示例:输出前15项
fib = fibonacci_generator()
for _ in range(15):
print(next(fib), end=' ') # 输出: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
4. 递归实现(仅教学用,效率低)
def fib_recursive(n):
"""返回第n项(递归实现,n≥0)"""
if n <= 1:
return n
return fib_recursive(n-1) + fib_recursive(n-2)
# 示例:输出前10项
for i in range(10):
print(fib_recursive(i), end=' ') # 输出: 0 1 1 2 3 5 8 13 21 34
注意:此方法时间复杂度为 O(2^n),仅适合演示,实际避免使用。
5. 格式化输出(每行5项)
def print_fib_formatted(n, items_per_line=5):
"""每行固定项数打印"""
a, b = 0, 1
for i in range(n):
print(f"{a:<8}", end='') # 左对齐,占8字符
if (i + 1) % items_per_line == 0:
print() # 换行
a, b = b, a + b
# 示例:前20项,每行5个
print_fib_formatted(20)
输出效果:
0 1 1 2 3
5 8 13 21 34
55 89 144 233 377
610 987 1597 2584 4181
6. 带下标的输出(显示项数)
def print_fib_with_index(n):
"""输出带序号的斐波那契数列"""
a, b = 0, 1
for i in range(n):
print(f"Fib({i}) = {a}")
a, b = b, a + b
# 示例
print_fib_with_index(5)
输出:
Fib(0) = 0
Fib(1) = 1
Fib(2) = 1
Fib(3) = 2
Fib(4) = 3
7. 控制输出范围(指定起止项)
def print_fib_range(start, end):
"""输出第start到end项(含两端)"""
a, b = 0, 1
for i in range(end + 1):
if i >= start:
print(a, end=' ')
a, b = b, a + b
# 示例:输出第5到10项
print_fib_range(5, 10) # 输出: 5 8 13 21 34 55
性能对比建议
- 小规模输出:直接使用迭代法(方法1或2)
- 大规模输出:生成器(方法3)避免内存问题
- 需要灵活控制:选择带范围或格式化的版本(方法5-7)
如果需要输出到文件或进一步处理,可以将 print 替换为写入操作。例如:
with open('fib.txt', 'w') as f:
a, b = 0, 1
for _ in range(100):
f.write(f"{a}\n")
a, b = b, a + b
3742

被折叠的 条评论
为什么被折叠?



