Conjecture de Collatz séquence

La conjecture de Collatz

ce que je suis en train de faire:
Écrire une fonction nommée collatz_sequence qui prend un entier de départ et renvoie la séquence de nombres entiers, y compris le point de départ, pour ce numéro. De retour de la séquence sous la forme d'une liste. Créez votre fonction, de sorte que si l'utilisateur tape un nombre entier inférieur à 1, il retourne la liste vide [].

de fond sur la conjecture de collatz:

Prendre tout nombre naturel n. Si n est pair, le diviser par 2 pour obtenir n /2 si n est impair de le multiplier par 3 et ajouter 1 pour obtenir 3n + 1. Répétez le processus indéfiniment. La conjecture est que n'importe quel nombre de départ, vous pourrez toujours finir par atteindre 1.

Ce que j'ai à ce jour:

def collatz_sequence(x):
    seq = [x]
    if x < 1:
       return []
    while x > 1:
       if x % 2 == 0:
         x= x/2
       else:
         x= 3*x+1 
    return seq

Lorsque je l'exécute avec un nombre inférieur à 1-je obtenir de l'ensemble vide qui est à droite. Mais quand je le lance avec un nombre au-dessus de 1 je ne reçois que le nombre c'est à dire collatz_sequence(6) renvoie [6]. J'ai besoin de ce retour à l'ensemble de la séquence de nombres, 6 devrait revenir 6,3,10,5,16,8,4,2,1 dans une liste.

Si vous faites beaucoup, c'est un candidat idéal pour une memoized fonction récursive.

OriginalL'auteur user1698174 | 2012-11-13