CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Python 3 récursivité

Toxik_II
Toxik_II
Niveau 5
29 mars 2015 à 00:06:27

Bonjour, :-)
Je poste ici pour demander de l'aide, je m'intéresse à un certain problème que je voudrais résoudre mais je n'y arrive pas.
Le problème est : imaginons une liste [ 2,4,5,6,8,10,7] et une variable qu'on désire, exemple : n = 10
Je voudrais trouver de manière récursive, une fonction qui renvoie l'ensemble des choix des nombres de la liste dont la somme = n
Mais on peut prendre plusieurs fois le même élément.
Exemple pour la liste[ 2,4,5,6,8,10,7] et n =10
On pourrait avoir comme réponse :
[(5*2),(2*4 +2),(2*5),(6+4),(6+2*2),(8+2),(10)] et il se peut que j'ai oublié certaines réponses :-p
Merci de votre aide :-)

Lowenheim
Lowenheim
Niveau 10
29 mars 2015 à 00:53:39

Ben pour chaque élément k de ta liste (si k <= n), si tu choisis d'utiliser k, il te reste à chercher récursivement toutes les possibilités pour faire (n - k) avec ta liste.

Fais attention aux éventuels doublons (soit dans ta liste de départ, soit que tu vas éventuellement générer suivant comment tu t'y prends).

Et puis je sais pas pour quelle raison tu veux faire ça exactement, mais ta fonction n'est pas très bien définie s'il y a des nombres négatifs et positifs dans ta liste ça risque de faire une infinité de solutions

Message édité le 29 mars 2015 à 00:57:36 par Lowenheim
Toxik_II
Toxik_II
Niveau 5
29 mars 2015 à 00:59:31

J'avais pas pensé à faire par soustraction... Je vais essayer, mais je suis encore ouvert à toute proposition :-)
Merci !
Mais non, il n'y a que des nombre > 0 dans la liste, afin d'éviter justement la boucle infini

Message édité le 29 mars 2015 à 01:01:01 par Toxik_II
Lagrangien
Lagrangien
Niveau 8
30 mars 2015 à 01:38:42

Je te conseille de t'intéresser au techniques dites de backtracking. Ici, tu backtrack si la somme des éléments restants dans ta liste est inférieure au nombre n désiré. J'ai un code qui fait exactement ce que tu cherches à faire, si tu y arrives toujours pas redis-le.

Toxik_II
Toxik_II
Niveau 5
12 avril 2015 à 08:00:29

J'y suis parvenu via backtracking en effet, merci :)

JmeDefonceAuLSD
JmeDefonceAuLSD
Niveau 5
12 avril 2015 à 14:37:45

Utilise Prolog et c'est terminé en 10 minutes :ok:

Lowenheim
Lowenheim
Niveau 10
12 avril 2015 à 15:18:45

10 minutes c'est le temps que met ton programme à tourner sur une instance de taille 10 non ? :o))

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment