遞歸的概念:
當(dāng)函數(shù)自身包含了對自身的調(diào)用,那么就是遞歸
遞歸的小練習(xí)
#對非線性列表求和
mylist = [1,2,[3],5,[6,[7,8,9]],1,2]
mysum = 0
def get_sum(iter):#接收一個等待求和的多層序列
#iter 中 無非兩種數(shù)據(jù)類型: list int
global mysum
for var in iter:
if type(var) == int: #當(dāng)前取出來的數(shù)據(jù)是int
mysum += var
else:
get_sum(var) #遇到的又是一個列表,那么我們繼續(xù)遍歷
#for循環(huán)結(jié)束的時候,遞歸結(jié)束
get_sum(mylist)
print(mysum)
#統(tǒng)計每一個出現(xiàn)的字符出現(xiàn)的次數(shù)
mylist = ['asdazxc','adxzc',['12390145fcsdjfhzkjxcmnasd','123987189asjkdsajkb'],'asdqwewqerq',['asd890q8390'],'asdhquiweqysa','asdhjkzhxjkckjasdh']
#把一樣的提出來
#統(tǒng)計每一個出現(xiàn)的字符出現(xiàn)的次數(shù)
#for循環(huán)實現(xiàn)
dict_num = {}
#key:對應(yīng)的字符
#value:出現(xiàn)的次數(shù)
def get_num(seq):
#字典是可變數(shù)據(jù)類型,所以直接可以在函數(shù)作用域內(nèi)進(jìn)行修改
for var in seq: #遍歷整個列表數(shù)據(jù)
if type(var) == list:
#如果取出來的還是一個列表,那么就繼續(xù)遞歸
get_num(var)
else: #如果碰到的是一個字符串
for i in var: #遍歷字符串,記錄次數(shù)
if i in dict_num:
# 如果獲取到的字符,已經(jīng)存在了字典中,那么他的次數(shù)+1
dict_num[i] = dict_num[i] + 1
else:
# 如果獲取到的字符沒出現(xiàn)過,那么就創(chuàng)建默認(rèn)值1就行
dict_num[i] = 1
get_num(mylist)
for key in dict_num:
print(key,':',dict_num[key])