03-09-2008 por nicksertecon
Exercicios com Recursividade...
Fiz uns exercícios em Linguagem C e gostaria da análise para que funcione direitinho:
1) Escrever um programa que leia um vetor de elementos ordenados que use uma função booleana recursiva que efetue pesquisa binária sobre um vetor de inteiros, que permita verificar se um valor pesquisado existe ou não no vetor.
Código:
#include <stdio.h>
#include <stdlib.h>
int busca (int ch, int e, int d, int v[]){
if (e == d-1)
return d; // base da recursao
else {
int m = (e + d)/2;
if (v[m] < ch)
return busca (ch, m, d, v);
else
return busca (ch, e, m, v);}
}
int main(void) {
int *vet, num, chave, i, ini, fim;
printf ("\nNumero de Elementos: "); // quantidade de elementos do vetor
scanf ("%d", &num);
vet = (int *) malloc (sizeof (int) * num); // alocando memoria para o vetor
printf ("Entre apenas com numeros inteiros positivos em ordem crescente: ");
for (i = 0; i < num; i++){
scanf ("%d", &vet[i]); // carregando o vetor de numeros
if (vet[i] < 0)
printf ("\nErro: Digite apenas numeros positivos crescentes!");
}
printf ("Numero que deseja buscar no vetor: ");
scanf ("%d", &chave);
if (chave == busca (chave, ini, fim, vet))
printf ("Numero encontrado \n%d", busca (chave, ini, fim, vet));
else
printf ("Numero nao consta nesta sequencia!");
return EXIT_SUCCESS;
}
2) Fazer uma função recursiva que calcule o valor da série S descrita a seguir para um valor n > 0 a ser fornecido como parâmetro para a mesma:
S = 1 + 1/2! + 1/3! + ... 1/n!
OBS: A função fatorial também deve ser recursiva.
Código:
#include <stdio.h>
#include <stdlib.h>
int fatorial (int n){
if (n == 0)
return 1;
else
return n * fatorial (n-1);
}
float soma_s (int n){
if (n== -1)
return 0;
else
{
float s;
printf ("%d\n", n);
s = 1.0 / fatorial (soma_s(n-1));
return s;}
}
int main (void)
{
int num;
printf ("\nInforme o numero para a sequencia da soma: ");
scanf ("%d", &num);
printf ("\nO fatorial %d\n", fatorial (num));
printf ("\nA soma e %.6f\n", soma_s(num));
return EXIT_SUCCESS;
}
03-09-2008 por nicksertecon
Esclarecimentos sobre o tópico
Fiz estes programinhas, mas ainda não obtive o resultado esperado.
Dessa forma gostaria que comentassem onde estão os erros, ok!
03-09-2008 por OoDragooNoO
Citação:
Postado Originalmente por nicksertecon
Fiz estes programinhas, mas ainda não obtive o resultado esperado.
Dessa forma gostaria que comentassem onde estão os erros, ok!
|
seria uma boa tu dizer que tipos de erros ocorrem :S
e se nao ocorre nenhum erro de compilaçao, qual o resultado esperado e qual o resultado obtido
flw xD/
03-09-2008 por nicksertecon
Citação:
Postado Originalmente por OoDragooNoO
seria uma boa tu dizer que tipos de erros ocorrem :S
e se nao ocorre nenhum erro de compilaçao, qual o resultado esperado e qual o resultado obtido
flw xD/
|
OoDragooNoO,
No caso do primeiro programa, o que acontece é que não está retornando o resultado da pesquisa, ou seja, a função recursiva não está respondendo ao main.
Quanto ao segundo, o erro é que o resultado para a soma de 1/n! tá dando sempre 1.0000, não mostrando os valores reais (float) que deveria.
Abraços!!!
03-09-2008 por Pirituba
Salve!
No primeiro programa vc não esta inicializando as variáveis ini = 0; e fim = num -1; pra passa-las.
Código:
int busca (int ch, int i, int d, int v[]){
int m;
if (i == d) // se ini == fim
return v[d]; // base da recursao
else {
m = (i + d)/2;
if(v[m] == ch) return v[m];
if (v[m] < ch)
return busca (ch, m + 1, d, v);
else
return busca (ch, i, m - 1, v);
}
}
Código:
printf ("Numero que deseja buscar no vetor: ");
scanf ("%d", &chave);
if (chave == busca (chave, ini, fim - 1, vet)) // fim = num;
printf ("Numero encontrado \n%d", chave); // não coloca a função aqui naum senaum vc vai chamar o processo todo novamente
else
printf ("Numero nao consta nesta sequencia!");
Abraço;
05-09-2008 por nicksertecon
Olá Pirituba...
Fiz o que vc sugeriu, inicializando as variáveis ini e fim, mas continua dando erro, informando que o número não consta na sequência, mesmo que esteja lá!
Abraços!!!
05-09-2008 por Pirituba
Salve....
Dah uma olhada nas alterações que eu fiz... no código que eu postei acima, o que vc deve fazer é o seguinte, pega um vetor pequeno e analisa caso a caso, quando o valor existe, quando ele é maior que todos os valores, quando ele é menor que todos, aih vc vai entender onde estão os problemas no seu código;
abraço
06-09-2008 por nicksertecon
Pirituba...
Consegui fazer com suas dicas e analisando outros exemplos!
Tenho outra aplicação com fila circular, mas não vou postar aqui por ser muito grande.
Posso enviar pro teu e-mail pra análise?
Obrigado, ok!
06-09-2008 por Pirituba
Manda aih, vou tentar responder o mais rápido blz.... falow
17-09-2008 por roger_oli
nicksertecon
mude o seguinte no segundo exercício:
- linha 13: if (n== 1) return 1;
- linha 19: vc num ta somando, entaum tem que fazer assim:
s = 1.0 / fatorial(n)+ (soma_s(n-1));
o primeiro exercício eu respondo amanhã que ainda não deu tempo de ver.
Falow
16-10-2008 por nicksertecon
Vlw a força Roger...
Consegui resolver!
Apliquei as mudanças sugeridas e ficou tudo funcionando!
Abraços!!!