003-001. self invoking
# @
# Method can invoke itself
# @
def hap(a, b):
    print(a + b)
def gop(a, b):
    print(a * b)
def hap_gop(a, b):
    hap(a, b)
    gop(a, b)
# hap_gop is invoking other methods rather than performing task by itself
# @
def countdown(n):
    if n == 0:
        print("Blastoff!")
    else:
        print(n)
        countdown(n-1)
countdown(3)
# 3
# 2
# 1
# Blastoff!
# @
# If you use 'self invoking' well, you can build complex program easily
# But computer can have much burdens