OVH Cloud OVH Cloud

Somme, récursive

15 réponses
Avatar
raph14
Bonjour,
J'essaie de faire une question de mon DM de NSI mais problème, je bloque. Aider moi svp :,)
Il faut faire la somme de (4,7,5,5,2,6,9,3,8,4) en utilisant une récursivité.
Voici la question:
"Implémenter une fonction récursive max_pyr(pyramide) retournant la somme maximale de la
pyramide."

Je n'y arrive pas j'ai essayé en créent cela:
def max_pyr(liste):
somme=0
if len(liste)<=0:
return somme
else:
somme+=liste[0]
liste.del[0]
return (max_pyr(liste),somme)
Mais rien cela ne marche pas...
Aider moi svp

5 réponses

1 2
Avatar
Benoit Izac
Bonjour,
Le 30/04/2021 Í  17:17, Olivier Miakinen a écrit dans le message
<s6h72u$mo6$ :
Méthode récursive :
=======================================> def somme(liste):
if len(liste) == 0:
return 0
return liste[0] + somme(liste[1:])
====================================== C'est exactement ce que j'aurais fait. Je suis d'accord que c'est pourri

de créer une nouvelle liste Í  chaque fois mais, vu que c'est déjÍ  pourri
de le faire en recursif en Python, on n'est pas Í  ça près.
--
Benoit Izac
Avatar
raph14
Le vendredi 30 Avril 2021 à 20:09 par Benoit Izac :
Bonjour,
Le 30/04/2021 Í  17:17, Olivier Miakinen a écrit dans le
message
Méthode récursive :
=======================================> def somme(liste):
if len(liste) == 0:
return 0
return liste[0] + somme(liste[1:])
====================================== C'est exactement ce que j'aurais fait.
Je suis d'accord que c'est pourri
de créer une nouvelle liste Í  chaque fois mais, vu que
c'est déjÍ  pourri
de le faire en recursif en Python, on n'est pas Í  ça
près.
--
Benoit Izac
J'ai finis par réussir, voici le code pour ceux qu'ils le veulent :)
Et merci encore pour votre aide.
T = [4,7,5,5,2,6,9,3,8,4]
def somme(liste,result=0):
if len(liste)<=0:
return result
else:
result+=liste[0]
del liste[0]
return somme(liste, result)
Pour une pyramide contenant "4,7,5,5,2,6,9,3,8,4"
Avatar
Benoit Izac
Bonjour,
Le 30/04/2021 Í  21:04, raph a écrit dans le message
 :
J'ai finis par réussir, voici le code pour ceux qu'ils le veulent :)
Et merci encore pour votre aide.
T = [4,7,5,5,2,6,9,3,8,4]
def somme(liste,result=0):
if len(liste)<=0:
return result
else:
result+=liste[0]
del liste[0]
return somme(liste, result)

Mouais…
T = [4,7,5,5,2,6,9,3,8,4]
def somme(liste,result=0):



... if len(liste)<=0:
... return result
... else:
... result+=liste[0]
... del liste[0]
... return somme(liste, result)
...
somme(T)



53
T



[]
Oups !
--
Benoit Izac
Avatar
debimax
Le 30/04/2021 Í  18:46, Dominique a écrit :
Le 30/04/2021 Í  15:03, debimax a écrit :
bref je verrai bien ton exercice comme le maximum d'une  somme 'des
branches d'une pyramide  par la programmation dynamique.

Bon, ben c'est décidé. Avec mes 6 mois de Python, mes 63 ans et mon BEPC
comme valeur maximale de mes diplÍ´mes, je confesse n'avoir rien compris :-)

Bonsoir dominique
https://fr.wikipedia.org/wiki/Programmation_dynamique?Pyramide%20de%20nombres#Pyramide_de_nombres
ce qui fait un truc comme ça
```python
p=[[3],[2,4],[2,7,5],[9,5,4,6]]
def sommeMaxR(p,i=0,j=0):
assert 0<=j<=i, 'Attention j doit être inférieur Í  i'
if i==len(p)-1:
return p[i][j]
else:
return p[i][j]+max(sommeMaxR(p,i+1,j), sommeMaxR(p,i+1,j+1))
sommeMaxR(p)
```
jean claude
Avatar
Dominique
Le 30/04/2021 Í  22:05, debimax a écrit :
Bonsoir dominique

Bonjour Jean-Claude,
https://fr.wikipedia.org/wiki/Programmation_dynamique?Pyramide%20de%20nombres#Pyramide_de_nombres

Merci pour ce lien. C'est un niveau mathématique qui dépasse largement
le mien.
ce qui fait un truc comme ça
```python
p=[[3],[2,4],[2,7,5],[9,5,4,6]]
def sommeMaxR(p,i=0,j=0):
assert 0<=j<=i, 'Attention j doit être inférieur Í  i'
if i==len(p)-1:
return p[i][j]
else:
return p[i][j]+max(sommeMaxR(p,i+1,j), sommeMaxR(p,i+1,j+1))
sommeMaxR(p)

Dès que je suis dans le TGV (dans 1 semaine), je dépouille ton script
ligne Í  ligne. Je comprendrai mieux.
Bien Í  toi,
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
1 2