24-NSIJ2ME3-1
-
La variable
iprend successivement les valeurs : 7, 8, 9 et enfin 10.f1(7)se termine donc. -
f1(-2)se termine et renvoie 10. -
Les 5 premières valeurs prises par
isont 12, 13, 14, 15 et 16. La fonction ne se termine pas carin'atteindra jamais 10. -
L'appel
f(n)se termine si et seulement sinest un entier inférieur ou égal à 10. -
f2(4)se termine et renvoie 4 + 2 + 0 = 6. -
f2(5)ne se termine pas car le cas de base n'est jamais atteint. En effet, chaque appel diminue la valeur de 2 :f2(5)appellef2(3)qui appellef2(1),f2(-1),f2(-3), etc. sans jamais atteindre une condition d'arrêt, ce qui entraîne une récursion infinie. -
L'appel
f2(n)se termine si et seulement sinest un entier positif ou nul pair. -
Si
arret(code_paradoxe, code_paradoxe)renvoieTruealors la prochaine instruction à être exécutée estinfini(42), ainsi l'appelparadoxe(code_paradoxe)ne se termine pas. -
Sinon, si
arret(code_paradoxe, code_paradoxe)renvoieFalsealors la prochaine instruction à être exécutée estreturn 0, ainsi l'appelparadoxe(code_paradoxe)termine. -
On a supposé que la fonction
arretexistait, mais cette hypothèse conduit à une situation paradoxale décrite par les deux questions précédentes. En effet, lorsquearretaffirme queparadoxes'arrête, ce dernier ne s'arrête pas, et lorsquearretaffirme queparadoxene s'arrête pas, il s'arrête. On aboutit donc à une contradiction. Par conséquent, notre hypothèse de départ est fausse : la fonctionarretne peut pas exister. Il s'agit d'un raisonnement par l'absurde.