Ir para conteúdo

Arquivado

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

Bruno Pacheco

Linguagem C - Recursão

Recommended Posts

#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];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse programa não tem erro nenhum . O que eu quero saber é com relação ao funcionamento do programa mas especificamente aqui :"if (x>v[n-1])" Como é feita a comparação entre x e v para saber então quem é maior ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse programa não tem erro nenhum . O que eu quero saber é com relação ao funcionamento do programa mas especificamente aqui :"if (x>v[n-1])" Como é feita a comparação entre x e v para saber então quem é maior ?

 

if (x>v[n-1])
Vai retornar verdadeiro se o valor de x for maior que o valor da posição n-1 do vetor:

Parece q vai semprev retornar "false", pois o vetor vesta em ordem crescente.

Use um debugador e intenderá perfeitamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que é difícil pegar um lápis e um papel e fazer um 'dry run' do algorítmo?

Vamos lá:

 

Considerando a função:

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];
        }
}
Com n = 4, e v = {4, 3, 2, 5}

 

n != 1, vamos pro ramo 'else'

x = maximo1(3, {4, 3, 2, 5})

 

n != 1, vamos pro ramo 'else'

x = maximo1(2, {4, 3, 2, 5})

 

n != 1, vamos pro ramo 'else'

x = maximo1(1, {4, 3, 2, 5})

 

n == 1, retorna v[0], ou seja, 4,

 

Como 4 > v[2-1], retorna-se 4.

 

Como 4 > v[3-1], retorna-se 4.

 

Como 4 < v[4-1], retorna-se v[4-1], ou seja, 5.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que é difícil pegar um lápis e um papel e fazer um 'dry run' do algorítmo?

Vamos lá:

 

Considerando a função:

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];
        }
}
Com n = 4, e v = {4, 3, 2, 5}

 

 

n != 1, vamos pro ramo 'else'

x = maximo1(3, {4, 3, 2, 5})

 

n != 1, vamos pro ramo 'else'

x = maximo1(2, {4, 3, 2, 5})

 

n != 1, vamos pro ramo 'else'

x = maximo1(1, {4, 3, 2, 5})

 

n == 1, retorna v[0], ou seja, 4,

 

Como 4 > v[2-1], retorna-se 4.

 

Como 4 > v[3-1], retorna-se 4.

 

Como 4 < v[4-1], retorna-se v[4-1], ou seja, 5.

 

Bem bolado, não conhecia isso. O debug é tão mais fácil... :-)

Mas é bem útil para quando não dispomos de um, tipo aki.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O debug é mais fácil????

 

O debug, como o próprio nome já sugere, é para encontrar os bugs do código, não para entender o algorítmo.

Não confunda algorítmo com código, são duas coisas completamente diferentes.

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.