205 lines
3.7 KiB
Python
205 lines
3.7 KiB
Python
|
#! /usr/bin/python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
def fib2(n): # return Fibonacci series up to n
|
||
|
"""Return a list containing the Fibonacci series up to n."""
|
||
|
result = []
|
||
|
a, b = 0, 1
|
||
|
while a < n:
|
||
|
result.append(a) # see below
|
||
|
a, b = b, a+b ### Attention subtil!
|
||
|
return result
|
||
|
|
||
|
# print(fib2(4))
|
||
|
|
||
|
# ==============
|
||
|
# Monde séquentiel 1
|
||
|
# a=3
|
||
|
# b=7
|
||
|
|
||
|
# a=b
|
||
|
# b=a+b
|
||
|
|
||
|
# a=7
|
||
|
# b=7+7=14
|
||
|
|
||
|
# =============
|
||
|
# Monde séquentiel 2
|
||
|
# a=3
|
||
|
# b=7
|
||
|
|
||
|
# b=a+b
|
||
|
# a=b
|
||
|
|
||
|
# b=10
|
||
|
# a=10
|
||
|
|
||
|
# =============
|
||
|
# Monde simultané.
|
||
|
|
||
|
# a=3
|
||
|
# b=7
|
||
|
|
||
|
# idem
|
||
|
# a,b=3,7
|
||
|
|
||
|
# idem
|
||
|
# b=7
|
||
|
# a=3.
|
||
|
|
||
|
# pas de différence dans ce cas.
|
||
|
|
||
|
# Par contre si je fais maintenant
|
||
|
# a, b = b, a+b ### Attention subtil!
|
||
|
|
||
|
# signifie que maintenant :
|
||
|
# a vaut 7 (valeur de b avant de faire le changement)
|
||
|
# b vaut 10 (valeur de a+b avant de faire le changement)
|
||
|
|
||
|
# ===
|
||
|
# a, b = b, a+b ### Attention subtil!
|
||
|
|
||
|
# a
|
||
|
# b
|
||
|
# (avant)
|
||
|
|
||
|
# c=a+b # variable annexe
|
||
|
# a=b
|
||
|
# b=c
|
||
|
|
||
|
# Maintenant a vaut bien la valeur de b avant
|
||
|
# et b vaut bien la valeur de la somme de a et b avant.
|
||
|
|
||
|
|
||
|
# La formule de math dit :
|
||
|
# la valeur de la suite pour 0 c'est 0
|
||
|
# la valeur de la suite pour 1 c'est 1
|
||
|
# la valeur de la suite pour n+2 c'est la somme des valeurs de la suite pour n+1 et pour n.
|
||
|
# f(0)=0
|
||
|
# f(1)=1
|
||
|
# f(n+2)=f(n+1)+f(n)
|
||
|
#
|
||
|
# f(6) = f(5) + f(4) = 5 + 3 = 8
|
||
|
# f(5) = f(4)+ f(3) = 3 + 2 = 5
|
||
|
# f(4) = f(3) + f(2) = 2 + 1 = 3
|
||
|
# f(3) = f(2) + f(1) = 1 + 1 = 2
|
||
|
# f(2) = f(1) + f(0) = 1 + 0 = 1
|
||
|
#
|
||
|
#
|
||
|
|
||
|
def f(n):
|
||
|
"""calcul de la suite de fibonacci (récursif comme dans la définition)"""
|
||
|
print(" I ")
|
||
|
if (n == 0 ) :
|
||
|
return 0
|
||
|
elif (n == 1) :
|
||
|
return 1
|
||
|
else :
|
||
|
return f(n-1)+f(n-2)
|
||
|
|
||
|
# print(f(0))
|
||
|
# print(f(1))
|
||
|
# print(f(2))
|
||
|
# print(f(3)) ### affiche 5 fois le " I ". Pourquoi?
|
||
|
# print(f(4)) ### même question? affiche 9 fois le " I ". Pourquoi?
|
||
|
# print(f(5))
|
||
|
|
||
|
|
||
|
# # f(3)?
|
||
|
# I
|
||
|
# return f(2)+f(1) #en attente du calcul de f(2) et de f(1)
|
||
|
# # f(2)
|
||
|
# I
|
||
|
# return f(1)+f(0) #en attente du calcul de f(1) et de f(0)
|
||
|
# # f(1)
|
||
|
# I
|
||
|
# # f(0)
|
||
|
# I
|
||
|
# # calcul fini
|
||
|
# # f(1)
|
||
|
# I
|
||
|
# ####
|
||
|
|
||
|
# # f(4)
|
||
|
# I
|
||
|
# #f(3)
|
||
|
# I
|
||
|
# #f(2)
|
||
|
# I
|
||
|
# #f(1)
|
||
|
# I
|
||
|
# +
|
||
|
# #f(0)
|
||
|
# I
|
||
|
# +
|
||
|
# #f(1)
|
||
|
# I
|
||
|
# +
|
||
|
# #f(2)
|
||
|
# I
|
||
|
# #f(1)
|
||
|
# I
|
||
|
# +
|
||
|
# #f(0)
|
||
|
# I
|
||
|
|
||
|
### plus simple avec une boucle
|
||
|
|
||
|
# for n in range(1,10):
|
||
|
# print("f("+ str(n) + ")="+ str(f(n)))
|
||
|
|
||
|
#début.
|
||
|
#a,b = 0,1 = f(0), f(1) # = f(n-2), f(n-1)
|
||
|
#a,b = b, a+b # = f(n-1), f(n-2)+f(n-1) qui vaut bien f(n) d'après la définition
|
||
|
|
||
|
def fib3(n): # return Fibonacci series up to n
|
||
|
"""Return the nth value of the sequence"""
|
||
|
a, b = 0, 1
|
||
|
blanc=" "
|
||
|
dec=""
|
||
|
while a < n:
|
||
|
a, b = b, a+b ### Attention subtil!
|
||
|
dec+=blanc
|
||
|
print(dec,a,b)
|
||
|
return b
|
||
|
|
||
|
print(fib3(4))
|
||
|
|
||
|
# def f(n):
|
||
|
# """calcul de la suite de fibonacci (récursif comme dans la définition mais en évitant de refaire des calculs)"""
|
||
|
# if (n == 0 ) :
|
||
|
# return 0
|
||
|
# elif (n == 1) :
|
||
|
# return 1
|
||
|
# else :
|
||
|
# return f(n-1)+f(n-2)
|
||
|
|
||
|
|
||
|
# 8*8 cases et 16*2 pièces.
|
||
|
# le joueur qui doit jouer (2 possiblités)
|
||
|
# le nombre de positions de pièces sur l'échiquiers.
|
||
|
# 32
|
||
|
#
|
||
|
# 64*63*62*...*32
|
||
|
#
|
||
|
# 5 pièces choisies roi noir, roi blanc, fou noir de la case noir, un pion noir, un pion blanc
|
||
|
# 64*63*62*61*60 possibilités au plus
|
||
|
# *2 pour le joueur dont c'est le tour.
|
||
|
# python dit : 1 829 882 880.
|
||
|
#
|
||
|
# il faut encore choisir toutes les combinaisons de 5 pièces possibles.
|
||
|
# /2 en échangeant le rôle de noir et blanc
|
||
|
# symétries gauche/droit
|
||
|
# roi noir, roi blanc
|
||
|
# 3 pièces à choisir parmi 15+15
|
||
|
# 30*29*28
|
||
|
|
||
|
# En gros au plus :
|
||
|
# 22 287 973 478 400
|
||
|
#
|
||
|
|
||
|
# Pour le Go non plus maintenant.
|
||
|
# Pour les échecs plus maintenant.
|
||
|
|
||
|
# pour battre Kasparov oui.
|