algo(計(jì)算) -> 會(huì)關(guān)注計(jì)算的步驟數(shù) -> 不同的結(jié)構(gòu)會(huì)影響步數(shù)
- 線性表(數(shù)組,鏈表)
- 樹(shù)(樹(shù),二叉樹(shù))
- 哈希
- 圖
與數(shù)學(xué)思想相關(guān)
漢諾塔問(wèn)題 -> 歸納
數(shù)學(xué)解法沒(méi)考慮的 -> 步數(shù),爆棧
- 斐波那契數(shù)列
f(0) = 1
f(1) = 1
f(n) = f(n - 1) + f(n - 2)
遞歸下去會(huì)有很多重復(fù)計(jì)算和stackoverflow
- 循環(huán)(迭代)代替遞歸(解決stackoverflow)
def recsum(x):
if x == 1:
return x
else:
return x + recsum(x - 1)
recsum(5)
5 + recsum(4)
5 + (4 + recsum(3))
5 + (4 + (3 + recsum(2)))
5 + (4 + (3 + (2 + recsum(1))))
5 + (4 + (3 + (2 + 1)))
5 + (4 + (3 + 3))
5 + (4 + 6)
5 + 10
15
循環(huán)(迭代)
for i in range(6):
sum += i
尾調(diào)用
把結(jié)果先算出來(lái),作為參數(shù)傳到遞歸里
def tailrecsum(x, running_total=0):
if x == 0:
return running_total
else:
return tailrecsum(x - 1, running_total + x)
前提 寫(xiě)得出來(lái)
- 緩存 (減少重復(fù)計(jì)算)
用個(gè)哈希表把計(jì)算過(guò)的結(jié)構(gòu)緩存