Python Collatz sequence generator using generators
Write a Python program to implement a generator that generates the Collatz sequence for a given number.
The Collatz sequence, also known as the Collatz conjecture or 3n+1 problem, is a sequence of numbers defined by the following rules:
- Start with any positive integer n.
- If n is even, divide it by 2 to get n/2.
- If n is odd, multiply it by 3 and add 1 to get 3n+1.
- Repeat the process, using the resulting number, until you reach the number 1.
For instance, starting with n = 12 and applying the function f without "shortcut", one gets the sequence 12, 6, 3, 10, 5, 16, 8, 4, 2, 1.
The number n = 19 takes longer to reach 1: 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1.
Sample Solution:
Python Code:
def collatz_sequence(n):
while n != 1:
yield n
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
yield 1
# Accept input from the user
n = int(input("Input a positive integer (n): "))
# Generate and print the Collatz sequence
print("Collatz sequence:")
for num in collatz_sequence(n):
print(num, end=", ")
Sample Output:
Input a positive integer (n): 12 Collatz sequence: 12, 6, 3, 10, 5, 16, 8, 4, 2, 1,
Input a positive integer (n): 19 Collatz sequence: 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1,
Explanation:
In the above exercise,
The "collatz_sequence()" function is a generator that generates the Collatz sequence for a given number n. It starts with n and repeatedly applies the Collatz rules until it reaches 1. Each number in the sequence is yielded using the yield keyword.
The program accepts a positive integer from the user and calls the collatz_sequence generator with that number. It iterates over the generated sequence and prints each number.
Flowchart:
Python Code Editor:
Contribute your code and comments through Disqus.
Previous: Python combinations generator using generators.
Next: Python next palindrome number generator using generators.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics