Ir para conteúdo

POWERED BY:

Arquivado

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

ricardo99

Dificuldade com esta recursividade

Recommended Posts

#include<stdio.h>
float media(int vet[10], int pos)//Este vai receber 0 para iniciar na posição 0 do vetor
{
   float soma;
   if(pos==10)
   {
       return 0;
   }
   else
   {
       return soma=vet[pos]+media(vet, pos+1);
   }
}
int main()
{
   int vetor[10];
   int i;
   float med;
   for(i=0;i<10;i++)
   {
       printf("Digite um numero");
       scanf("%i",&vetor[i]);
   }
   med=media(vetor, 0);//Este 0 e para a "pos"
   //começar com 0
   printf("%f",med);
   return 0;
}

 

este programa teria que fazer a media dos valores de um vetor, ai fiz ficar somando (ate ai normal) mas nao divide por 10 para fazer a media.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Às vezes é vantajoso (ou preciso) usar parâmetros da função que acumulem os resultados computados a cada chamada recursiva.

 

Como este é um exemplo simples, segue uma solução simples. Vou deixar que a investigue por si só, baseado no que já disse.

 

Sugiro que a estude com cuidado e tente fazer mais exemplos que necessitem ou encoragem este tipo de raciocínio:

 

// a.c -- compilação: gcc -std=c99 -Wall -Wextra -pedantic a.c -o a

#include <stdio.h>

double media_aritmetica(int vet[], size_t tamanho, size_t pos, double passo)
{
   return (pos == tamanho - 1) ?
(passo + vet[pos]) / tamanho :
media_aritmetica(vet, tamanho, pos + 1, passo + vet[pos]);
}

int main(void)
{
   printf("\n\t%lf\n", 
   media_aritmetica((int []) { 1, 2, 3, 4, 5 }, 5, 0, 0.0));
}

 

 

Uma observação: como em C é impossível determinar o tamanho de arrays que originam argumentos, e é necessário passá-los para a função, você pode usar a seguinte macro ao invés de valores numéricos:

 

#define TAMANHO(x) (sizeof x / sizeof *x)

 

E, a partir daí, fazer:

 

media_aritmetica(vetor, TAMANHO(vetor), 0, 0.0));

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.