#!/usr/bin/env python3
"""
斐波那契数列计算器
支持递归、迭代、生成器三种方法
"""

def fibonacci_recursive(n):
    """递归方法 - 简单但效率低"""
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)


def fibonacci_iterative(n):
    """迭代方法 - 效率高，推荐"""
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b


def fibonacci_generator(count):
    """生成器方法 - 适合大量数据"""
    a, b = 0, 1
    for _ in range(count):
        yield a
        a, b = b, a + b


def fibonacci_list(n):
    """返回前 n 个斐波那契数"""
    return list(fibonacci_generator(n))


if __name__ == "__main__":
    print("=" * 40)
    print("斐波那契数列计算器")
    print("=" * 40)
    
    # 示例：计算前 10 个数
    n = 10
    print(f"\n前 {n} 个斐波那契数：")
    fib_list = fibonacci_list(n)
    print(fib_list)
    
    # 示例：计算第 20 个数
    m = 20
    print(f"\n第 {m} 个斐波那契数（迭代）：{fibonacci_iterative(m)}")
    print(f"第 {m} 个斐波那契数（递归）：{fibonacci_recursive(m)}")
    
    print("\n" + "=" * 40)
    print("使用说明：")
    print("- fibonacci_iterative(n): 计算第 n 个斐波那契数")
    print("- fibonacci_list(n): 返回前 n 个斐波那契数列表")
    print("- fibonacci_generator(n): 生成器方式获取数列")
    print("=" * 40)
