Test Foro de elhacker.net SMF 2.1

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
Cita de: mikany en  6 Febrero 2017, 20:12 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:

#include <stdio.h>

void invierte(char *c) {
   if(*c)
      invierte(c+1);
   putchar(*c);
}

int main() {
   invierte("Hola, soy una cadena");
}





Mira, siguiendo con la misma idea:

void invierte ( char*p, char*i, int k) {
    if(*p && k)
        invierte(p+1, i, k-1);
    i[k] = *p;
}


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

if(!(k--<0)) invierte(p,i,k);


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