寫乙個計算斐波那契數列值的方法
1 1 2 3 5 8 13 21
def fibonacci(n):
if n <= 1:
return 1
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # 89
# 那麼問題來了,在遞迴深度足夠的情況下,下面的遞迴,2分鐘都不出來結果
print(fibonacci(50)) # 阻塞,無結果
# 當計算13的時候,又重新計算8和5,計算21的時候又重複計算13和8
83 5
1 2 2 3
加快取版的計算斐波那契數列值的方法
def fibonacci(n,cache=none):
# 第一次進來無快取物件
if cache is none:
cache = {}
# 如果在快取中有,則在快取中取
if n in cache:
return cache[n]
if n<=1:
return 1
# 快取沒有,則計算,且放入快取
cache[n] = fibonacci(n-1,cache) + fibonacci(n-2,cache)
return cache[n]
print(fibonacci(50)) # 20365011074
# 如果有多個方法都需要這樣的快取,每個都加,豈不是很累
# 用裝飾器,寫一次就夠。
用裝飾器
# 定義乙個裝飾器
def memo(func):
cache = {}
def wrap(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return wrap
#使用裝飾器
@memo
def fibonacci(n):
if n <= 1:
return 1
return fibonacci(n-1) + fibonacci(n-2)
# 還是一樣呼叫
print(fibonacci(50)) # 20365011074
python3 50個練習例子之建立臨時檔案
from tempfile import temporaryfile,namedtemporaryfile 在windows上兩者沒有區別 temporaryfile mode w b buffering 1,encoding none,newline none,suffix none,prefix...
python3 50個練習例子之拼接字串
普通拼接 from time import clock 有int str型別 l zhangsan 18,男 zhangsan 18,男 zhangsan 18,男 zhangsan 18,男 s start clock for i in l s str i 生成的臨時物件較多 end clock ...
Python 學習 小例子練習
網上了點小例子,練習一下下,都是特別簡單的。而且這些 也都是找的網上的 目的是在於練習一下python和熟悉下python的編碼風格等等 學習一門語言,最快的方法就是把它用在世界的開發中,這樣才能不斷的理解,積累,單純的靠看書,感覺是沒有太大的用途的一點一點慢慢來 第乙個,有1 2 3 4個數字,能...