xaaak 0 Denunciar post Postado Novembro 26, 2014 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
_Isis_ 202 Denunciar post Postado Novembro 27, 2014 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
xaaak 0 Denunciar post Postado Novembro 27, 2014 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
lgono 0 Denunciar post Postado Novembro 27, 2014 @xaaak poderia informar o enunciado do problema? obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 27, 2014 É só seguir o código. A recursão só é executada quando u < m. Compartilhar este post Link para o post Compartilhar em outros sites
Novogle 0 Denunciar post Postado Novembro 27, 2014 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
xaaak 0 Denunciar post Postado Novembro 28, 2014 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