Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 17-03-2016 12: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 ?

805526001.jpg


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 06:21:14

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 256

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

def f(x,y,N):
    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 07:48:34)


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 18-03-2016 17: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 08:20:20

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 443

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 09:04:54

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 256

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 :

def f(x,y,N):
    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 = 3 ; N = 1 ; x + y = 6
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 22: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 00: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 !!!

def f2(x,y,N):
    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 11:00:36

camille23
Invité

Re : Un contrôle, un échec.

Bonjour,

Résultats avec commentaires

entrée f 3 3 1                        Appel du niveau 1
    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 11: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 12:13:09

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 256

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

Pied de page des forums