Ir ao conteúdo
  • Cadastre-se

Problema em Recursividade


xagun

Posts recomendados

Qual o problema ? Quero que ele me retorne a soma dos elementos do vetor...

 

int i=2;
int soma(int vet[3]);

int main(int argc, char *argv[]) {
	
	int j, vet[3], retorno = 0;
	
	printf("Digite 3 numeros inteiros: ");
	
	for(j=0; j<3; j++){
		scanf("%d", &vet[j]);
	}
	
	printf("O somatorio dos numeros é: %d", soma(vet));
	
	return 0;
}

int soma(int vet[3]){
	
	if (i == 0)
		return *(vet+i);
	else 
		return vet[i] + soma(vet[i--]);
	
}

 

Link para o comentário
Compartilhar em outros sites

Não tenho 100% de certeza que é isso.. ,mas repare sua função soma:

 

voce esta recebendo, o valor de array de 3 ints, so que em nenhum momento você buscando esse valor... voce não ta passando o valor de I em nenhum momento pra função e esta testando se o valor é igual a 0. 

 

Pelo no main você chama a função, passando o valor do vetor, mas não passo o valor de I.. 

 

Não me lembro como o C funciona mas no Java, se o a variavel ta declarada dentro de uma função, a outra não vê.. 

 

Mas vamos supor que a função soma esteja vendo o valor de i.. ele foi iniciado por zero e não mudou em nenhum outro lugar.. se você reparar o valor de I seria sempre 0 (ou nulo, se a função soma não enxergar a variavel i).. Então ele emtra ma primeira condição e pronto... morre ai...

 

alem do mais tenho quase certeza que você não pode usar (vet+i), você vai ta somando o valor de i com o vetor todo?? acho que você tem que especifcar a posição que você que somar

 

de qualquer forma, poste ai o erro que esta dando pra ver se dá para ajudar.. 

Link para o comentário
Compartilhar em outros sites

Cara, a variável i é global e ela tem valor de 2, logo a última posição do vetor de 3 posições.. 

como é um ponteiro eu estou retornando o conteúdo daquela posição , q é a posição i , que no caso é 0 quando digo:

if (i == 0)

return *(vet+i);

 

porém, pode ser que a função não esteja mudando o valor do meu contador , logo a posição, então fiz algumas alterações, e ainda assim o código continua com o mesmo erro..

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

//int i=2;
int soma(int *vet, int cont);

int main(int argc, char *argv[]) {
	
	int cont, retorno = 0;
	int *vet;
	
	vet = malloc (sizeof(int));
	
	printf("Digite 3 numeros inteiros: ");
	
	for(cont=0; cont<3; cont++){
		scanf("%d", vet+cont);
	}
	cont--;
	printf("\nO somatorio dos numeros é: %d", soma(vet,cont));
	
	return 0;
}

int soma(int *vet, int cont){
	
	if (cont == 0)
		return vet[cont];
	else 
		return vet[cont] + soma(vet[cont--],cont--);
	
}

 

Link para o comentário
Compartilhar em outros sites

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

int soma(int i, int *v, int s);
int main(int argc, char *argv[]) {

	int j, vet[3], s=0;
	int i=2;
	printf("Digite 3 numeros inteiros: ");

	for(j=0; j<3; j++){
		scanf("%d", &vet[j]);
		fflush(stdin);
	}

	printf("O somatorio dos numeros é: %d", soma(i,vet, s));

	return 0;
}

int soma(int i, int *v, int s){

	if (i == -1)
		return s;
	else{
        s+=*(v+i);
        soma(i-1,v, s);
	}
}

fiz correções no teu código...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

6 horas atrás, Gabriel_Moro disse:

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

int soma(int i, int *v, int s);
int main(int argc, char *argv[]) {

	int j, vet[3], s=0;
	int i=2;
	printf("Digite 3 numeros inteiros: ");

	for(j=0; j<3; j++){
		scanf("%d", &vet[j]);
		fflush(stdin);
	}

	printf("O somatorio dos numeros é: %d", soma(i,vet, s));

	return 0;
}

int soma(int i, int *v, int s){

	if (i == -1)
		return s;
	else{
        s+=*(v+i);
        soma(i-1,v, s);
	}
}

fiz correções no teu código...

massa cara !! Não fiz desse jeito, continuei no meu , e achei meu erro, mas todo código é válido. 

Valeu :P

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!