Write a function that takes one argument a positive integer

Write a function that takes one argument, a positive integer n. The function then generates and returns the Collatz sequence starting at n (and ending at 1). The Collatz sequence is a sequence obtained by repeatedly applying the following rule to the previous number in the sequence:

a.If a number is even, then the next number is that number divided by 2. Eg. 10->5

b.If a number is odd, then the next number is 3 times the number plus 1. Eg 5->16

Your function should stop when the sequence gets to 1. Note that it is an open question whether the Collatz sequence for every positive integer always ends at 1. Sample usage:

Solution

def collatz(num):## writing function for generating collatz sequence
if num % 2 == 0:## if num is even
return num // 2## return divisible by 2
elif num % 2 == 1:## if number is odd
nextNum = 3 * num + 1
return nextNum## next number is 3 times the number plus 1

resultList=[]; ## initialising Result list
n = input(\"Give me a number: \") ## taking input from user
resultList.append(n)## appending number to list
while n != 1:## running loop till n=1
n = collatz(int(n))## calling collatz function
resultList.append(n)## appending result
print(resultList);## printing Resultlist
  

##Give me a number: 10
##[\'10\', 5, 16, 8, 4, 2, 1]
##>>> ================================ RESTART ================================
##>>>
##Give me a number: 22
##[\'22\', 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
##>>> ================================ RESTART ================================
##>>>
##Give me a number: 55
##[\'55\', 166, 83, 250, 125, 376, 188, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
##>>>

Write a function that takes one argument, a positive integer n. The function then generates and returns the Collatz sequence starting at n (and ending at 1). Th

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site