Ir para conteúdo
Fórum Script Brasil
  • 0

Linguagem C - Recursão


Bruno Pacheco

Pergunta

#include<stdio.h>
#include<stdlib.h>


int maximo1(int n,int v[]){
    if(n==1)
      return v[0]; /*problema pequeno*/
        else{
      int x;
          x=maximo1(n-1,v);/*instância menor do problema*/
          if (x>v[n-1])
                  return x;
          else
                  return v[n-1];
        }
}


int  main(){
        int i,VET[]={11,22,33};
        int MAX;
        i=3;
        MAX=maximo1(i,VET);
        printf("\nMaior valor=%d\n",MAX);
system("Pause");
}
Estou com dúvida no código acima.Esse código não fui eu que fiz, mas sei que esse código vai retornar o maior valor. Minha dúvida está nessa parte , queria saber o que essa parte do código está fazendo:
int x;
          x=maximo1(n-1,v);/*instância menor do problema*/
          if (x>v[n-1])
                  return x;
          else
                  return v[n-1];

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Observe que as chamadas da função maximo1, o primeiro parâmetro é n-1. Então as sucessivas chamadas desta função sempre decrementarão 1. Deixa eu ver se eu consigo te explicar:

Por exemplo se n for inicialmente 5.

Primeira chamada da função maximo1 -> maximo1(5, v)
        Ela chama ela mesmo -> maximo1(5-1, v) ou maximo1(4, v)
                  Ela chama ela mesmo -> maximo1(4-1, v) ou maximo1(3, v)
                             Ela chama ela mesmo -> maximo1(3-1, v) ou maximo1(2, v)
                                        Ela chama ela mesmo -> maximo1(2-1, v) ou maximo1(1, v)
                                                     Como n == 1 retorna o v[0]

Então todas essas chamadas são empilhadas e a partir do retorno da última ela vem retornando uma a uma até a primeira chamada. Bom é meio difícil pra mim te explicar aqui, mas se você for seguido os passos do seu código e colocar os resultados no papel você vai entender.

Qualquer coisa posta sua dúvida de novo. Abraço.

Editado por RonaldoRG
Link para o comentário
Compartilhar em outros sites

  • 0

Pelo seu código x é o retorno da função maximo1, ai ele compara com o valor do vetor na posição anterior a n.

É como se ele estivesse fazendo assim:

x = v[0];
x = maior(x, v[1]);
x = maior(x, v[2]);
x = maior(x, v[3]);
...
x = maior(x, v[n-1]);

x é o maior valor do vetor v.

Editado por RonaldoRG
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...