python 斐波那契数列

本文介绍了三种实现斐波那契数列的方法:普通方法、迭代器方式及生成器方式,并提供了每种方法的Python代码示例及运行结果。
部署运行你感兴趣的模型镜像

斐波那契数列实现

方法一:普通方法
def fib(n):
    a=0
    b=1
    for i in xrange(n):
        a,b = b,a+b
    return a    
方法2:迭代器
# -*- coding: utf-8 -*-
class Fibs:
    def __init__(self):
        self.a=0
        self.b=1

    def next(self):
        self.a,self.b=self.b,self.a+self.b
        return self.a

    def __iter__(self):#迭代器自身实现它的iter方法,使得可以直接在for循环中使用
        return self


#测试用例
fibs=Fibs()
fib_list = []
for fib in fibs:
    fib_list.append(fib)
    if fib > 1000:
        break
print fib_list 

##输出结果:
>>> 
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597] 
方法3:生成器
# -*- coding: utf-8 -*-
def fibs():
    a,b=0,1
    while True:#无限生成
        a,b=b,a+b
        yield a


#测试用例
fib_list = []
num=1000#设置一个截止数字
for fib in fibs():
    fib_list.append(fib)
    if fib>num:break
print fib_list

##输出结果:
>>> 
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 计算斐波那契数列第 n 项模 9997 的 斐波那契数列定义如下: - F(0) = 0 - F(1) = 1 - F(n) = F(n-1) + F(n-2) (当 n ≥ 2) 为了高效计算第 n 项并对 9997 取模,可以采用 **迭代法(滚动组)**,这样可以避免递归带来的指级时间复杂度问题,同时也能避免栈溢出的风险。 #### 方法:迭代实现(滚动组 + 取模) 该方法通过维护两个变量 `a` 和 `b` 来表示 F(n-2) 和 F(n-1),并通过循环不断更新这两个,直到计算出 F(n)。每一步都对 9997 取模,确保不会溢出。 ```cpp int fib_mod(int n, int mod = 9997) { if (n == 0) return 0; if (n == 1) return 1; int a = 0, b = 1; for (int i = 2; i <= n; ++i) { int temp = (a + b) % mod; a = b; b = temp; } return b; } ``` #### 示例调用 ```cpp #include <iostream> using namespace std; int fib_mod(int n, int mod = 9997) { if (n == 0) return 0; if (n == 1) return 1; int a = 0, b = 1; for (int i = 2; i <= n; ++i) { int temp = (a + b) % mod; a = b; b = temp; } return b; } int main() { int n = 10; cout << "Fib(" << n << ") % 9997 = " << fib_mod(n) << endl; return 0; } ``` #### 时间与空间复杂度分析 - **时间复杂度**:O(n),只需要一次遍历即可。 - **空间复杂度**:O(1),仅使用常级额外空间。 #### 优化建议 如果 n 非常大(如 n > 1e6),可以进一步优化为 **矩阵快速幂** 或利用 **斐波那契数列的模周期性(Pisano Period)** 来加速计算。 --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值