ayuda con este programa con funcion recursiva

Iniciado por mikany, 6 Febrero 2017, 20:12 PM

0 Miembros y 1 Visitante están viendo este tema.

mikany

// 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);
}

dato000

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??



MAFUS

#2
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

do-while


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


Revisa y corrige lo anterior. Está mal. Si no ves el error estudia sobre predecrementos y postdecrementos.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!