fibonacci.py

#
# numpy : la pré-allocation des tableaux est obligatoire en Python
#
# C'est un avantage majeur de Python sur Matlab qui permettait d'agrandir à la volée les vecteurs...
# Il est donc nettement plus compliqué d'écrire du code sans pre-allocation des tableaux.
# Quoique si on veut vraiment écrire un code inefficace, c'est toujours possible !
#
# En Python, l'allocation à la volée reste possible avec la fonction append() de numpy
# mais le langage est conçu pour que cela soit plus ardu à faire que de pré-allouer le tableau.
# C'est vraiment un des aspects où Python est réellement supérieur à Matlab :-)
#
# Vincent Legat - 2018
# Ecole Polytechnique de Louvain
#

from numpy import *
from timeit import default_timer as timer

#
# A partir de n = 500 environ, les nombres obtenus ne sont plus représentables sur l'ordinateur
# et un avertissement est généré automatiquement : ces deux lignes de code permettent juste
# de filtrer les messages indésirables du code :-)   
# 

import warnings
warnings.filterwarnings("ignore")


# =========================================================================

def tic():
  global startTime
  startTime = timer()

# =========================================================================

def toc(message = ''):
  global startTime
  stopTime = timer()
  if message:
    message = ' (' + message + ')' ;
  print("Elapsed time is %.6f seconds %s" % ((stopTime - startTime),message) )
  startTime = 0
  
# =========================================================================

def fibonacci(n):
  f = zeros(n)
  f[0] = 1
  f[1] = 2
  for k in range(2,n):
    f[k] = f[k-1] + f[k-2]
  return f

# =========================================================================

def fibonaccon(n):
  f = [1,2]
  for k in range(2,n):
    f = append(f,[f[k-1] + f[k-2]])
  return f

# ============================= mainProgram ===============================


n = 200000
tic()
fibonacci(n)
toc('fibonacci')

tic()
fibonaccon(n)
toc('fibonaccon')

# =========================================================================