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.
OriginalL'auteur user1698174 | 2012-11-13
Vous devez vous connecter pour publier un commentaire.
Vous avez oublié d'ajouter le
x
valeurs de laseq
liste:De vérification:
S'il vous plaît copiez ma solution complète dans votre programme et essayez de nouveau. Je l'ai testé et il fonctionne. Je devine que votre problème peut être dû à la mauvaise indentation.
Je suis désolé j'ai eu un line out de l'endroit qui a tout gâcher. Je vous remercie beaucoup pour l'aide!!
OriginalL'auteur Lauritz V. Thaulow
Voici un code qui produit ce que vous cherchez. La case à cocher pour
1
est construit lors de la déclaration, et ce de manière itérative ajoute à la listeseq
.Remarque, cela va être très lent pour les grandes listes de nombres. Un cache ne suffit pas à résoudre le problème de vitesse, et vous ne serez pas en mesure de l'utiliser dans un brute-force de la solution du projet euler problème, il va prendre une éternité (comme il le fait tous les calculs, chaque itération.)
OriginalL'auteur kreativitea
Voici une autre façon de le faire:
Ce sera de demander à l'utilisateur un nombre encore et encore pour être mis en elle jusqu'à ce qu'il se ferme
OriginalL'auteur Nisarg Lukka
c'est ce que je propose..
None
.OriginalL'auteur redx21
OriginalL'auteur Tana
OriginalL'auteur Jose
programme ci-dessus résoudre le collataz séquence de nombre dans mon style, j'ai écrit le code.je sais que cela peut simplifier encore fait.
OriginalL'auteur ShivaGuntuku