0
def collatz(a):
    if a==1:
        return a
    elif a%2==0:
        print(a//2)
        collatz(a//2)
    else:
        print(a*3+1)
        collatz(a*3+1)

a = int(input("Enter no. "))
print(collatz(a))
Moinuddin Quadri
  • 46,825
  • 13
  • 96
  • 126
Nick
  • 21
  • 6

2 Answers2

1

First see Function returns None without return statement

Then your method has nothing to return, because the purpose is to see the path of values and the stop value is always 1

def collatz(a):
    print(a)
    if a == 1:
        return             # just the stop case
    elif a % 2 == 0:
        collatz(a // 2)
    else:
        collatz(a * 3 + 1)

So call it without a print, you don't expect anything to be returned

a = int(input("Enter value:"))
collatz(a)

You could even combine in

def collatz(a):
    print(a)
    if a % 2 == 0:
        collatz(a // 2)
    elif a > 1:
        collatz(a * 3 + 1)
azro
  • 53,056
  • 7
  • 34
  • 70
0

You can return the functions directly:

def collatz(a):
    if int(a)==1:
        return a
    elif a%2==0:
        print(a//2)
        return collatz(a//2)
    else:
        print(a*3+1)
        return collatz(a*3+1)
berkayln
  • 935
  • 1
  • 8
  • 14