Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 17-03-2016 13:28:34
- Terces
- Membre
- Inscription : 16-07-2015
- Messages : 466
Un contrôle, un échec.
Bonjour,
J'ai eu un contrôle d'informatique il y a 1 jour et la réponse à la première question était 42(oui c'est original) mais moi j'ai trouvé 19, pouvez vous m'expliquer comment trouver 42 s'il vous plait ?
La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.
Hors ligne
#2 18-03-2016 07:21:14
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 947
Re : Un contrôle, un échec.
Salut,
Ça m'évitera de chercher, qu'est-ce qu'est censé faire le f=%d du printf("f=%d",...)
Après je traduirai en Python pour travailler avec..
@+
[EDIT]
C'est bon, ça marche
if N==0:
return x+y
if y==0:
return x
return f(f(x,y-1,N),f(x,y-1,N)+y+1,N-1)
print(f(3,3,1))
Programme recursif.
Effectivement, il sort 42...
Deux solutions :
* soit le parsemer de print pour voir ce qui sort
* en exam, sans bécane, simuler le foncionnement à la main
Dernière modification par yoshi (18-03-2016 08:48:34)
Arx Tarpeia Capitoli proxima...
Hors ligne
#3 18-03-2016 18:03:35
- Terces
- Membre
- Inscription : 16-07-2015
- Messages : 466
Re : Un contrôle, un échec.
Salut, je viens de voir que j'ai fais f(3,2,1) pourtant avant de poster sur le forum j'avais vérifié cette information :( je ne comprends vraiment pas comment ca à pu me passer sous les yeux... enfin bref voila une façon simple de perdre d'office 4 points à une question simple...
A+ et désolé de t'avoir fait perdre du temps.
La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.
Hors ligne
#4 19-03-2016 09:20:20
- freddy
- Membre chevronné
- Lieu : Paris
- Inscription : 27-03-2009
- Messages : 7 457
Re : Un contrôle, un échec.
Salut,
quelqu'un aurait l'amabilité de me dire ce que fait ce pgm de calcul (et dans quel langage) ?
D'avance, merci !
De la considération des obstacles vient l’échec, des moyens, la réussite.
Hors ligne
#5 19-03-2016 10:04:54
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 947
Re : Un contrôle, un échec.
Salut freddy,
Apparemment, c'est du C...
Ce qu'il fait ? Bonne question... A part, enquiquiner (je suis poli) Terces, pas grand chose de productif, à mon goût.
J'ai modifié mon programme :
if N==0:
print("N = 0. Sortie 1 -->","; x =",x,"; y =",y,"; N =",N,"; x + y =",x+y)
return x+y
if y==0:
print("y = 0. Sortie 2 -->","x =",x,"; y =",y,"; N =",N,"; x + y =",x+y)
return x
print("x et N > 0. Sortie 3 -->","; x =",x,"; y =",y,"; N =",N,"; x + y =",x+y)
return f(f(x,y-1,N),f(x,y-1,N)+y+1,N-1)
print(f(3,3,1))
Et voilà la sortie aérée manuellement :
x et N > 0. Sortie 3 --> x = 3 ; y = 2 ; N = 1 ; x + y = 5
x et N > 0. Sortie 3 --> x = 3 ; y = 1 ; N = 1 ; x + y = 4
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
N = 0. Sortie 1 --> x = 3 ; y = 5 ; N = 0 ; x + y = 8
x et N > 0. Sortie 3 --> x = 3 ; y = 1 ; N = 1 ; x + y = 4
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
N = 0. Sortie 1 --> x = 3 ; y = 5 ; N = 0 ; x + y = 8
N = 0. Sortie 1 --> x = 8 ; y = 11 ; N = 0 ; x + y = 19
x et N > 0. Sortie 3 --> x = 3 ; y = 2 ; N = 1 ; x + y = 5
x et N > 0. Sortie 3 --> x = 3 ; y = 1 ; N = 1 ; x + y = 4
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
N = 0. Sortie 1 --> x = 3 ; y = 5 ; N = 0 ; x + y = 8
x et N > 0. Sortie 3 --> x = 3 ; y = 1 ; N = 1 ; x + y = 4
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
y = 0. Sortie 2 --> x = 3 ; y = 0 ; N = 1 ; x + y = 3
N = 0. Sortie 1 --> x = 3 ; y = 5 ; N = 0 ; x + y = 8
N = 0. Sortie 1 --> x = 8 ; y = 11 ; N = 0 ; x + y = 19
N = 0. Sortie 1 --> x = 19 ; y = 23 ; N = 0 ; x + y = 42
Fin. 42
Personnellement, je n'ai toujours pas compris pourquoi ce script s'arrête : il y a quelque chose qui m'échappe toujours...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#6 19-03-2016 23:56:38
- mseeker
- Membre
- Inscription : 27-10-2011
- Messages : 5
Re : Un contrôle, un échec.
Bonsoir,
Les conditions d'arrêt sont y == 0 ou N == 0 or les 2 variables sont décroissantes à travers la récursion donc le programme s'arrête.
Du moins je pense ça :-)
À+
Hors ligne
#7 20-03-2016 01:04:52
- camille23
- Invité
Re : Un contrôle, un échec.
Bonne nuit,
Pour comprendre les récursions emboitées, une bonne façon est d'appeler f1 qui retourne pour le paramètre x et f2 qui retourne pour y.
Vous pouvez ensuite postuler à l'école 42 !!!
print("entrée f2",x,y,N)
if N==0:
print("return f2,x+y =",x+y)
return x+y
if y==0:
print("return f2,x =",x)
return x
return f2(f1(x,y-1,N),f2(x,y-1,N)+y+1,N-1)
def f1(x,y,N):
print("entrée f1",x,y,N)
if N==0:
print("return f1,x+y =",x+y)
return x+y
if y==0:
print("return f1,x =",x)
return x
return f1(f1(x,y-1,N),f2(x,y-1,N)+y+1,N-1)
def f(x,y,N):
print("entrée f",x,y,N)
if N==0:
print("return f,x+y =",x+y)
return x+y
if y==0:
print("return f,x =",x)
return x
return f(f1(x,y-1,N),f2(x,y-1,N)+y+1,N-1)
print(f(3,3,1))
#8 20-03-2016 12:00:36
- camille23
- Invité
Re : Un contrôle, un échec.
Bonjour,
Résultats avec commentaires
entrée f1 3 2 1 Appel du niveau 2
entrée f1 3 1 1 Appel du niveau 3 pour x du niveau 2
entrée f1 3 0 1 Appel du niveau 4 pour x du niveau 3
return f1,x = 3 x du niveau 3 évalué
entrée f2 3 0 1 Appel du niveau 4 pour y du niveau 3
return f2,x = 3 y du niveau 3 évalué à 3+(y d'appel du niveau 3 égal à 1)+1=5
entrée f1 3 5 0 le paramètre d'appel N3 est décrémenté pour sortir du niveau 3
return f1,x+y = 8 x du niveau 2 évalué
entrée f2 3 1 1 mêmes appels pour y du niveau 2
entrée f1 3 0 1
return f1,x = 3
entrée f2 3 0 1
return f2,x = 3
entrée f2 3 5 0
return f2,x+y = 8 y du niveau 2 évalué à 8+(y d'appel du niveau 2 égal à 2)+1=11
entrée f1 8 11 0 le paramètre d'appel N2 est décrémenté pour sortir du niveau 2
return f1,x+y = 19 x du niveau 1 évalué
entrée f2 3 2 1
entrée f1 3 1 1
entrée f1 3 0 1
return f1,x = 3
entrée f2 3 0 1
return f2,x = 3
entrée f1 3 5 0
return f1,x+y = 8
entrée f2 3 1 1
entrée f1 3 0 1
return f1,x = 3
entrée f2 3 0 1
return f2,x = 3
entrée f2 3 5 0
return f2,x+y = 8
entrée f2 8 11 0
return f2,x+y = 19 y du niveau 1 évalué à 19+(y d'appel du niveau 1 égal à 3)+1=23
entrée f 19 23 0 le paramètre d'appel N1 est décrémenté pour sortir du niveau 1
return f,x+y = 42
42
#9 22-03-2016 12:59:22
- camille23
- Invité
Re : Un contrôle, un échec.
Bonjour,
J'ai encore un commentaire : en C les paramètres sont évalués de la droite vers la gauche
en Python ils sont évalués de la gauche vers la droite.
Attention donc à des effets pernicieux éventuels en transcrivant de C en Python (ce n'est pas le cas ici)
#10 22-03-2016 13:13:09
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 947
Re : Un contrôle, un échec.
Re,
Vite fait, pas le temps de me consacrer à réfléchir pour l'instant...
Ma mère était hospitalisée, elle va sortie : je dois trouver une solution pour que ses problèmes ne réapparaissent pas...
J'aurais sûrement des questions !
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
Pages : 1
Discussion fermée