Um desenvolvedor de software escreveu o programa a seguir, ...
Um desenvolvedor de software escreveu o programa a seguir, usando Python:
def funcao (X):
if (X==1): return (1)
else: return ( X + funcao (X-2) )
X = int ( input (‘Valor X = ’) )
print (‘ Resultado = ‘, funcao (X) )
Caso seja passado como valor de X o número 27, o resultado apresentado será:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - 196
Para resolver essa questão, precisamos entender o conceito de função recursiva, que é uma função que chama a si mesma durante sua execução. No código apresentado, a função funcao é chamada recursivamente com o argumento X sendo decrementado em 2 a cada chamada, até que a condição base X == 1 seja atendida, momento no qual a função retorna 1 e interrompe as chamadas recursivas.
Quando o valor 27 é passado para a função, ela executa a seguinte sequência de chamadas:
- funcao(27): Como 27 é diferente de 1, a função chama funcao(25) e aguarda o resultado para somar com 27.
- funcao(25): Similarmente, chama funcao(23) e aguarda o resultado para somar com 25.
- funcao(23): Continua o processo chamando funcao(21), e assim por diante...
- Esse processo se repete, diminuindo o valor de X por 2 até que atinja 1.
Como estamos lidando com um número ímpar, todas as chamadas subsequentes também serão com números ímpares, eventualmente chegando ao número 1. Somando todos os números ímpares de 27 até 1, obtemos o resultado da recursão. Vamos ver a sequência numérica:
27 + 25 + 23 + 21 + 19 + 17 + 15 + 13 + 11 + 9 + 7 + 5 + 3 + 1 = 196
Portanto, a resposta correta é a Alternativa B, que indica o valor 196. A soma desses números ímpares sequenciais é um padrão típico em questões de recursividade que envolvem decrementos fixos e uma condição de parada clara.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Gabarito B.
for i in range(27,0,-2)
total += i;
A questão utiliza recursividade para diminuir o parâmetro dela até chegar a condição X == 1, a partir daí ela vai começar uma cadeia de somas onde cada termo vai se somar.
O joão falou sobre:
for i in range(27,0,-2):
total += i;
Por que se vocês notarem com mais atenção é a mesma coisa. range(27,0,-2) vai do íncide 27 até o índice 1, pois o range é exclusivo, de -2 de passo, portanto chegando até o 1. A sacada dessa questão é que por trás dessa recursividade toda o código só faz uma soma dos valores de 27 até o 1 de 2 em 2
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo