Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xaaak

recursividade

Recommended Posts

Estou com problemas na resoluçao desse código, já compilei e descobri o resultado mas não sei como chegar nele, se alguém puder ajudar eu agradeço



#include<stdio.h>

int h (int u, int m, int l)
{
if (u < m)
{
u = u + m + l;
m = u - m + l;
return h (u+2,m+4,l+1) + 2; // acredito que a dificuldade esteja aqui nessa linha

}
else
return u + m + l;
}
int main()
{

int a,b,c;
a=1;
b=2;
c=3;

printf("%d",h(a,b,c));
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria interessante se a gente soubesse o que ele tem que fazer, porque pelos nomes usados p/ variáveis e funções...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, a questão era a seguinte:

 

Qual o valor que sera impresso ao final da execução do programa?

 

O valor é 54, porem nao estou conseguindo entender o passo a passo para chegar a esse resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo, tirei um tempo ontem para estudar o código, ele é simples mas para entende-lo é necessário concentração e um conhecimento básico na linguagem C, tente acompanhar meu raciocínio, vamos lá!

#include<stdio.h>
 
int h (int u, int m, int l)
{
if (u < m)
{
u = u + m + l;
m = u - m + l;
return h (u+2,m+4,l+1) + 2;  // acredito que a dificuldade esteja aqui nessa linha
 
}
else 
return u + m + l;
}
int main()
{
 
int a,b,c;
a=1;
b=2;
c=3;
 
printf("%d",h(a,b,c));
return 0;
}

Quando você compila, dá o resultado 54, mas você já deve saber disso.

 

PARTE I

 

No final do código, ele chama a função 'h', com os valores 'a' que é = 1, b = 2, c = 3. A função troca as variáveis 'a', 'b', 'c' por 'u', 'm', 'l', respectivamente, a seguir começa com uma condição (If (u < m), [o que é verdade, pois 'u' é menor do que 'm'] então o 'u' passa a valer 'u' + 'm' + 'l' (linha 7), ou seja, 1 + 2 + 3 = 6, o 'u' passa a ser 6; a seguir o 'm' é atribuido à 'u' - 'm' + 'l', ou seja, 6 (novo valor de 'u') - 2 + 3 = 7, o 'm' passa a valer 7, e o 'l' permanece valendo 3 (valor inicial de 'c').

 

No final do If(u<m) ele chama novamente a função 'h', mas adicionando 2 ao valor de 'u', 4 ao valor de 'm', e 1 ao valor de 'l' e fora da função adiciona 2 ao valor final, ou seja, o 'u' passa a valer 6 + 2 = 8, o 'm' passa a valer 7 + 4 = 11, e o 'l' 3 + 1 = 4.

 

PARTE II

 

Agora inicia-se a condição novamente, o 'u' é maior ou menor do que o 'm' ? (u=8, m=11). O 'u' continua sendo menor do que o 'm', então é a primeira parte da condição (If) novamente ! As linhas 7 e 8 se repetem mais uma vez.

O 'u' passa a valer 'u' + 'm' + 'l', ou seja, 8 + 11 + 4 = 23; o 'm' passa a valer 'u' - 'm' + 'l', ou seja, 23 - 11 + 4 = 16, e o 'l' permanece 4.

 

Agora indo pra linha 9, a função 'h' é chamada mais uma vez (pela segunda e ultima vez), adicionando novamente 2 à variável 'u', ou seja, 23 + 2 = 25, adicionando 4 ao 'm', 16 + 4 = 20, e adicionando 1 ao 'l', 4+1 = 5, e por ultimo adicionando 2 à resposta final (lembrando que já tem um '2' adicionado, então agora ficara +2, ou seja 2+2 = 4).

 

Recapitulando, o 'u' agora é 25, o 'm' é 20 e o 'l' é 5, inicia-se a função If novamente: o 'u' é maior ou menor do que o 'm' ? Agora ele é maior ! Então faremos o procedimento do else (u+m+l (+4 [não esqueça!]) ou seja, 25 + 20 + 5 = 50 + 4 = 54!

 

Está aí nosso 54 :)

Espero que tenha entendido essa breve explicação, e ficarei contente em ter ajudado, estou à disposição.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela explicação, agora compreendi, aquele "2" que esta somando a funçao é chamado duas vezes se tornando "4" no final, muito obrigado a todos!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.