Voici une version Python d'une solution à ce que vous voulez atteindre:
dctNodeIDs_vs_Childs = {}
dctNodeIDs_vs_Childs[1] = (2,3,4)
dctNodeIDs_vs_Childs[2] = (13,14,15)
dctNodeIDs_vs_Childs[3] = (5,6,7,8)
dctNodeIDs_vs_Childs[4] = (9,10,11,12)
lstNodeIDs_vs_Weight = [None,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
def getSumOfWeights(currNodeID, lstNodeIDs_vs_Weight = lstNodeIDs_vs_Weight, dctNodeIDs_vs_Childs = dctNodeIDs_vs_Childs):
sumOfWeights = 0
print("#currNodeID", currNodeID)
if currNodeID not in dctNodeIDs_vs_Childs:
sumOfWeights += lstNodeIDs_vs_Weight[currNodeID]
else:
for childNodeID in dctNodeIDs_vs_Childs[currNodeID]:
print("## childNodeID", childNodeID)
if childNodeID not in dctNodeIDs_vs_Childs:
sumOfWeights += lstNodeIDs_vs_Weight[childNodeID]
else:
sumOfWeights += lstNodeIDs_vs_Weight[childNodeID] + sum([ getSumOfWeights(nodeID) for nodeID in dctNodeIDs_vs_Childs[childNodeID] ])
return sumOfWeights
lstNodeIDs_vs_WeightsOfChildNodes = [None for _ in range(len(lstNodeIDs_vs_Weight)+1)]
for nodeID in dctNodeIDs_vs_Childs.keys():
print("nodeID =", nodeID)
lstNodeIDs_vs_WeightsOfChildNodes[nodeID] = getSumOfWeights(nodeID)
print("---")
print(lstNodeIDs_vs_WeightsOfChildNodes)
qui donnent la sortie suivante:
nodeID = 1
#currNodeID 1
## childNodeID 2
#currNodeID 13
#currNodeID 14
#currNodeID 15
## childNodeID 3
#currNodeID 5
#currNodeID 6
#currNodeID 7
#currNodeID 8
## childNodeID 4
#currNodeID 9
#currNodeID 10
#currNodeID 11
#currNodeID 12
nodeID = 2
#currNodeID 2
## childNodeID 13
## childNodeID 14
## childNodeID 15
nodeID = 3
#currNodeID 3
## childNodeID 5
## childNodeID 6
## childNodeID 7
## childNodeID 8
nodeID = 4
#currNodeID 4
## childNodeID 9
## childNodeID 10
## childNodeID 11
## childNodeID 12
---
[None, 119, 42, 26, 42, None, None, None, None, None, None, None, None, None, None, None, None]
Bienvenue sur StackOverflow. Veuillez lire et suivre les consignes de publication dans la documentation d'aide. [sur le sujet] (http://stackoverflow.com/help/on-topic) et [comment demander] (http://stackoverflow.com/help/how-to-ask) s'appliquent ici. StackOverflow n'est pas un service de conception, de codage, de recherche ou de tutorat. – Prune
Comment devriez-vous procéder? Sélectionnez un langage de programmation et écrivez le code de sommation si pour vous ou faites-le simplement à la main :). Et oui, ce genre de problème est bien adapté à un mécanisme de récurrence si vous choisissez le chemin d'écriture du code en calculant les sommes pour vous. – Claudio
@Prune, je vais essayer de formuler de meilleures questions à l'avenir. Merci –