cycles.py

Created by schraf

Created on September 08, 2018

333 Bytes

On considère une suite xn+1=f(xn ) avec une valeur initiale x0. Lorsqu’il existe i≠j tels que xi=xj la suite est périodique.
Par exemple dans la suite :
2, 0, 6, 3, 1, 6, 3, 1, 6, 3, 1, ...
le cycle est 6, 3, 1 et se répétera forcément puisque f(1)=6, f(6)=3 et f(3)=1.

Ecrire une fonction cycle qui admet en paramètre la liste des premiers éléments de la suite et donne en sortie la valeur du premier terme qui se répète ainsi que la longueur du cycle ou alors “Pas de cycle” si aucun cycle n’est apparent.

>> cycle([2,3,4,2,3,4])
[2,3]
# En effet 2,3,4 est le cycle qui se répète donc le 1er terme est 2 et la longueur du cycle = 3
>> cycle([1,2,3,4])
'Pas de cycle'
>> cycle([1,2,3,4,7,3,4,7,3])
[3,3]
# 3,4,7 est le cycle de 1er terme 3 et de longueur 3


def cycle(suite):
  for i,v in enumerate(suite):
    for j,w in enumerate(suite[i+1:]):
      if v==w: return [v, j+1]
  return "Pas de cycle"

# Version 2

def cyclev2(suite):
  for i in range(len(suite)):
    for j in range(i+1,len(suite)):
      if suite[i]==suite[j]: return [suite[i], j-i]
  return "Pas de cycle"