若有幫助到你,記得點贊、收藏哦!
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 22 20:33:41 2018
@author: Loulch C.C
"""
"""
T
0.5
l / \r
0.49 0.51
l / \ r l / \r
0.490 0.491 0.510 0.511
"""
T={'spi':0,'spv':0.5,'r':{'spi':0,'spvl':0.51,'r':0.511,'l':0.510},'l':{'spi':0,'spv':0.49,'r':0.491,'l':0.490}}
def isTree(obj):
"""
函數說明:測試輸入變量是否爲一棵樹
"""
return (type(obj).__name__=='dict') #判斷爲字典類型返回true
def getMean(tree):
"""
函數說明:從上往下遍歷樹直到找到葉節點爲止,若找到兩個葉節點,計算他們的平均值
返回值:樹的平均值(對樹進行塌陷式處理)
"""
if isTree(tree['r']):
tree['r'] = getMean(tree['r'])
print(tree['r'])
if isTree(tree['l']):
tree['l'] = getMean(tree['l'])
print(tree['l'])
return (tree['l']+tree['r'])/2.0
print(getMean(T))
"""
輸出:
dict
True
float
False
float
False
0.5105
dict
True
float
False
float
False
0.4905
0.5005
遞歸過程如下:
計算getMean
先判斷r0.51,是,遞歸getMean:接着判斷r0.511,否;又接着l0.510,否;說明第一個r的遞歸到頭,計算getMean值。
再判斷r0.49,是,遞歸getMean:接着判斷r0.491,否;又接着l0.490,否;說明第一個l的遞歸到頭,計算getMean值。
最後,計算getMean值。
遞歸本來就是繞來繞去的,不是太好解釋,只能解釋到這了,新手第一次可能犯難,熟練了很好懂。
"""