24-NSIJ2ME3-1
-
La variable
i
prend 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
i
sont 12, 13, 14, 15 et 16. La fonction ne se termine pas cari
n'atteindra jamais 10. -
L'appel
f(n)
se termine si et seulement sin
est 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 sin
est un entier positif ou nul pair. -
Si
arret(code_paradoxe, code_paradoxe)
renvoieTrue
alors 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)
renvoieFalse
alors la prochaine instruction à être exécutée estreturn 0
, ainsi l'appelparadoxe(code_paradoxe)
termine. -
On a supposé que la fonction
arret
existait, mais cette hypothèse conduit à une situation paradoxale décrite par les deux questions précédentes. En effet, lorsquearret
affirme queparadoxe
s'arrête, ce dernier ne s'arrête pas, et lorsquearret
affirme queparadoxe
ne 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 fonctionarret
ne peut pas exister. Il s'agit d'un raisonnement par l'absurde.