def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
def fact_test():
for x in range(10000000):
i = factorial(10)
print(factorial(10))
%timeit fact_test()
3628800 1 loop, best of 3: 18 s per loop
%load_ext cython
%%cython
def c_naive_factorial(n):
if n == 0:
return 1
else:
return n * c_naive_factorial(n - 1)
def c_naive_fact_test():
for x in range(10000000):
i = c_naive_factorial(10)
print(c_naive_factorial(10))
%timeit c_naive_fact_test()
3628800 1 loop, best of 3: 4.96 s per loop
%load_ext cython
%%cython
import cython
cimport cython
cdef int cfactorial(int n):
if n == 0:
return 1
else:
return n * cfactorial(n - 1)
cdef void cfact_test(int n):
cdef i, j
for i in range(10000000):
j = cfactorial(n)
def fact_test(n):
cfact_test(n)
def factorial(n):
return cfactorial(n)
print(factorial(10))
%timeit fact_test(10)
print("Approximately 50x improvement")
3628800 323 ms ± 1.48 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) Approximately 50x improvement