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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-22 17:43   11   0

最简单版本

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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP