# Hands-on: Using C-functions

In this exercise you can practice using C-functions in Cython modules.
© CC-BY-NC-SA 4.0 by CSC - IT Center for Science

In this exercise you can practice using C-functions in Cython modules.

The code for this exercise is located under cython/c-functions.

Fibonacci numbers are a sequence of integers defined by the recurrence
relation

Fn = Fn-1 + Fn-2

with the initial values F0=0, F1=1.

The module fib.py contains a function fibonacci(n) that
calculates recursively Fn. The function can be used e.g. as

from fib import fibonaccifibonacci(30)

Make a Cython version of the module, and investigate how adding type
information and making fibonacci a C-function affects performance
(hint: function needs to be called both from Python and C). Use
timeit for performance measurements, either from command line

\$ python3 -m timeit -s "from fib import fibonacci" "fibonacci(30)"

or within IPython

In []: %timeit fibonacci(30)

Note: this recursive algorithm is very inefficient way of calculating Fibonacci numbers.

How much speedup are you are able to get by using Cython? Are you able to come up with more efficient pure Python algortihm? Please comment!

© CC-BY-NC-SA 4.0 by CSC - IT Center for Science