def factorial_iterative(n): """ Returns the factorial of n, iteratively """ num = 1 for i in range(2, n+1): num *= i # same as num = num * i return num def factorial(n): """ Returns the factorial of n, recursively """ # check the base case if n == 0: return 1 else: # the recursive case return n * factorial(n-1) def factorial_interesting(n): """ a one-line implementation for calculating factorial. It's not recursive, but kind of cool :) """ return eval(str(range(2,n+1))\ .replace('[',"")\ .replace(']',"")\ .replace(", ", "*")) def rec_sum(some_list): if len(some_list) == 0: return 0 else: return some_list[0] + rec_sum(some_list[1:]) def rec_sum(some_list): print "Calling rec_sum: " + str(some_list) if len(some_list) == 0: print "base case returning 0" return 0 else: temp = some_list[0] + rec_sum(some_list[1:]) print str(some_list) + " returning " + str(temp) return temp def reverse(some_string): """ Returns the reverse of the input string """ if len(some_string) == 0: return "" else: return reverse(some_string[1:]) + some_string[0] def power(base, exponent): """ Returns the base^exponent """ if exponent == 0: return 1 else: return base * power(base, exponent-1) def fast_power(base, exponent): """ Returns the base^exponent """ if exponent == 0: return 1 elif exponent % 2 == 0: # b^e = b^(e/2) * b^(e/2) temp = fast_power(base, exponent/2) return temp * temp else: return base * fast_power(base, exponent-1)