"""A simple example of a recursive function"""

def print_stars(n) :
    if (n == 1) :
        # base case - print one star
        print '*'
    else :
        # recursive case - print one more star
        print '*',
        print_stars(n - 1)

# here's a version with an even simpler base case

def print_stars2(n) :
    if (n == 0) :
        # base case - end the line of input
        print
    else :
        # recursive case; print one more star
        print '*',
        print_stars2(n - 1)
 


"""Recursive functions for computing x^n"""

# first a non-recursive function:

def pow_iterative(x, n) :
    product = 1
    for i in range(n) :
        product = product * x
    return product

# a recursive function for computing x^n:

def pow(x, n) :
    """Returns x^n"""
    if n == 0 :
        # base case; any number to 0th power is 1
        return 1
    else :
        # recursive case:  x^n = x * x^(n-1)
        return x * pow(x, n-1)

def pow_no_base(x, n) :
    return x * pow_no_base(x, n-1)

def pow2(x, n) :
    if n == 0 :
        # base case; any number to 0th power is 1
        return 1
    elif n % 2 == 0 :
        # recursive case 1:  x^y = (x^2)^(n/2)
        return pow(x * x, n / 2)
    else :
        # recursive case 2:  x^n = x * x^(n-1)
        return x * pow(x, n - 1)