python斐波那契数列30,Python 斐波那契数列优化

最简单版本

def fib(n):

return 1 if n < 2 else fib(n - 1) + fib(n - 2)

print(fib(30))

1346269

aaada7699be9677305347cd987d544a7.png

使用装饰器缓存优化

使用缓存达到与循环数组相似的效果

def cache(fun):

fibs = {}

def wrapper(n):

if n in fibs:

return fibs[n]

res = fun(n)

fibs[n] = res

return res

return wrapper

@cache

def fib(n):

return 1 if n < 2 else fib(n - 1) + fib(n - 2)

print(fib(30))

1346269

0fc575e2e64522240b72fad4ba698252.png

矩阵快速幂

0214f6ee9f297ca57fa343cfecfe8250.png

import numpy as np

def power(m, n):

if n <= 1:

return m

t = power(m, n // 2)

if n % 2 == 0:

return np.dot(t, t)

return np.dot(m, np.dot(t, t))

def fib(n):

mat = np.array([[1, 1], [1, 0]])

t = power(mat, n)[0][1]

print(t)

for i in range(1, 40):

fib(i)

1

1

2

3

5

8

13

21

34

55

89

0ea880a2416913e582b4673917fc97b7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值