Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mikany en 6 Febrero 2017, 20:12 pm



Título: ayuda con este programa con funcion recursiva
Publicado por: mikany en 6 Febrero 2017, 20:12 pm
// segun esto imprime la palabra pero alrevez , y hay error y no tengo idea de cual es el error , o si hay una manera más facil . mil gracias

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

void invierte(char*,char*,int);

int main(int a,char*argv[])
{
   char palabra[]="javier";
   char*invertida = (char*)malloc(sizeof(palabra));
   
   invierte(palabra, invertida, strlen(palabra)-1);
   
   printf("%s",invertida);
   
   return 0;
   
}
void invierte ( char*p,char*i,int k)
{
   *i++ = p[k];
   if(!(k--<0)) invierte(p,i,k);
}


Título: Re: ayuda con este programa con funcion recursiva
Publicado por: dato000 en 6 Febrero 2017, 21:00 pm
#include <stdio.h>
#include <stdlib.h>

Necesitas los espacios correctos en las librerias, la de conio.h no la necesitas.

No le veo error alguno.

Cuál es el problema??


Título: Re: ayuda con este programa con funcion recursiva
Publicado por: MAFUS en 6 Febrero 2017, 21:08 pm
Para hacerlo de tu forma me gusta más una solución iterativa. En cambio para escribir una frase al revés esta solución recursiva es muy elegante:

Código
  1. #include <stdio.h>
  2.  
  3. void invierte(char *c) {
  4.    if(*c)
  5.       invierte(c+1);
  6.    putchar(*c);
  7. }
  8.  
  9. int main() {
  10.    invierte("Hola, soy una cadena");
  11. }



Mira, siguiendo con la misma idea:

Código
  1. void invierte ( char*p, char*i, int k) {
  2.    if(*p && k)
  3.        invierte(p+1, i, k-1);
  4.    i[k] = *p;
  5. }

Al final sí tiene una solución elegante recursiva :D


Título: Re: ayuda con este programa con funcion recursiva
Publicado por: do-while en 7 Febrero 2017, 11:18 am
Código:
if(!(k--<0)) invierte(p,i,k);

Revisa y corrige lo anterior. Está mal. Si no ves el error estudia sobre predecrementos y postdecrementos.