# Factorial of a number using memoization result = [-1] * 10 result[0] = result[1] = 1 def factorial(num): """ >>> factorial(7) 5040 >>> factorial(-1) 'Number should not be negative.' >>> [factorial(i) for i in range(5)] [1, 1, 2, 6, 24] """ if num < 0: return "Number should not be negative." if result[num] != -1: return result[num] else: result[num] = num * factorial(num - 1) # uncomment the following to see how recalculations are avoided # print(result) return result[num] # factorial of num # uncomment the following to see how recalculations are avoided ##result=[-1]*10 ##result[0]=result[1]=1 ##print(factorial(5)) # print(factorial(3)) # print(factorial(7)) if __name__ == "__main__": import doctest doctest.testmod()