ricardo99 0 Denunciar post Postado Julho 1, 2012 #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
guidjos 65 Denunciar post Postado Julho 3, 2012 À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