#! /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.