'''
Created on Nov 24, 2014

@author: Susan
'''
# Problem: Given a list of numbers, add up the even ones

def SumUpEvens(data):
    # data is a list of integers
    total = 0
    for num in data:
        if num%2==0:
            total += num
    return total

def SumUpEvensRec(data):
    # data is a list of integers
    # notice no loop here   
    # TODO:
            
 
def PrintOnePerLine(data):
    for num in data:
        print num
        
def PrintOnePerLineRec(data): 
    if len(data) > 0:
        print data[0]
        PrintOnePerLineRec(data[1:])
        
def PrintOnePerLineRec2(data): 
    # swap the two lines in the if, what happens?
    if len(data) > 0:        
        PrintOnePerLineRec2(data[1:])
        print data[0]
        
def PrintDuke(num):
    if num <= 0:
        return
    else:
        print "We all make Duke what it is"
        PrintDuke(num-1)
        
# Fibonacci numbers
def Fibonacci(num):
    if num== 0:
        return 0
    if num == 1:
        return 1
    return Fibonacci(num-1) + Fibonacci(num-2)
    
def Mystery(num):
    if num > 0:
        return 1 + Mystery(num/2)
    else:
        return 2 + num
        
def testing():
    data = [5, 6, 9, 1, 3, 7, 8, 2] 
    print "SumUpEvens is ", SumUpEvens(data)
    print "SumUpEvensRec is ", SumUpEvensRec(data)
    print "PrintOnePerLine"
    PrintOnePerLine(data)
    print "PrintOnePerLineRec"
    PrintOnePerLineRec(data)
    print "PrintOnePerLineRec2"
    PrintOnePerLineRec2(data)
    print "Mystery(9)", Mystery(9)
    print "Mystery(3)", Mystery(3)
    print "Mystery(18)", Mystery(18)  
    print  "Print Duke 6 times"
    PrintDuke(6)  
    
    print "Fibonacci numbers"
    print "Fib(0)", Fibonacci(0)
    print "Fib(1)", Fibonacci(1)
    print "Fib(2)", Fibonacci(2)
    print "Fib(3)", Fibonacci(3)
    print "Fib(4)", Fibonacci(4)
    print "Fib(5)", Fibonacci(5)
    print "Fib(6)", Fibonacci(6)
            
if __name__ == "__main__":
    testing()
