Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python] Le terme est égal à la somme des 2 précédents

Sujet résolu
Anonyme
13 juin 2008 à 21:26:27

Je me suis trompé dans le titre : chaque terme est égal à 3 * le terme précédent.


Bonjour :)

Citation : Cours Python

Écrivez un programme qui affiche une suite de 12 nombres dont chaque terme soit égal au
triple du terme précédent.



J'ai codé ça de manière récursive et voici ce que cela donne :

def triple(nbr, i):
    if i <= 12:
        print nbr
        return triple(nbr * 3, i + 1)
    print nbr

triple(1, 0)


Et cela produit :

1
3
9
27
81
243
729
2187
6561
19683
59049
177147
531441
1594323


Est-il plus intéressant de coder cette fonction en itératif ?

i = 1
j = i * 3
while i <= 12:
	j *= 3
	print j
	i += 1


Merci pour vos réponses ;)
  • Partager sur Facebook
  • Partager sur Twitter
13 juin 2008 à 21:34:45

Un conseil pour la version récursive : il est courant, pour répeter quelque chose un nombre fixé de fois, d'utiliser un compteur décroissant plutôt qu'on compteur croissant :
def triple(nbr, i):
    if i > 0:
        print nbr
        return triple(nbr * 3, i - 1)

triple(1, 12)


Ainsi, l'information concernant le nombre d'itérations à effectuer se trouve au lieu de l'appel, et pas dans la définition de la fonction. C'est plus propre.

Sinon, les deux versions se valent. L'itérative sera sans doute la plus familière pour la plupart des programmeurs.
  • Partager sur Facebook
  • Partager sur Twitter
13 juin 2008 à 21:36:35

Y'a plus simple, plus Python:
for i in range(12):
    print 3**i
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
13 juin 2008 à 22:28:30

Manux, c'est clairement pas l'idée de l'exercice :p .

Voleur de signature, rajoute au moins la mention à quelqu'un.
  • Partager sur Facebook
  • Partager sur Twitter
13 juin 2008 à 22:32:40

De plus Manux, c'est moins performant, parce que lui fait exactement 12 multiplications alors que tu en fais plus.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
13 juin 2008 à 23:52:24

En effet blue un compteur décroissant est plus simple. Merci :)
  • Partager sur Facebook
  • Partager sur Twitter
24 avril 2021 à 5:03:00 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


24 avril 2021 à 9:57:02

@Franck.Kaim1 Bonjour, merci de ne pas déterrer d'ancien sujet résolu.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter