Gabarito disponível
Considere o código abaixo, escrito em linguagem Python.
def tico(X, X0, XF):
X0 += 200
if X * X0 < XF:
return teco(X, X0, XF)
return X0
def teco(X, X0, XF):
if X0 < X * XF:
XF //= 3
return tico(X, X0, XF)
return XF
X = teco(5, 1, 1000)
print(X)
O valor impresso em tela ao executá-lo é igual a:
def tico(X, X0, XF):
X0 += 200
if X * X0 < XF:
return teco(X, X0, XF)
return X0
def teco(X, X0, XF):
if X0 < X * XF:
XF //= 3
return tico(X, X0, XF)
return XF
X = teco(5, 1, 1000)
print(X)
O valor impresso em tela ao executá-lo é igual a:
Resolução comentada
Rastreamento das chamadas mútuas teco/tico resulta em 201.
teco(5,1,1000): 1 < 5000, então XF = 1000//3 = 333 e chama tico(5,1,333). Em tico, X0 = 201 e 5*201 = 1005, que não é menor que 333, então retorna X0 = 201.
Análise das alternativas
A) 1, B) 111, D) 333 e E) 401 não correspondem ao fluxo de execução. O 333 é apenas o valor intermediário de XF, e 401 exigiria uma segunda chamada a tico, que não ocorre.
Referência: Python – funções, recursão mútua e divisão inteira (//).
Resolução comentada do VaiConcursos.