[C con Clase] recursividad

marcelinux marcelinator en gmail.com
Mar Mar 22 17:04:41 CET 2016


El pasado 2016-03-20 11:07:07, yolmer escribió:
 
y> En otro orden de ideas para resolver el ejercicio tuve que crear un par de
y> funciones más una para truncar la cadena y otra para añadir un caracter,

Ya que has propuesto una solución, me atrevo a ofrecer mi versión.
No es como Salvador propone.
De hecho, primero se me ocurrió sin recursividad, con un simple for.
Después lo intentaré con su sugerencia y mostraré el resultado aquí.

// Dada una cadena, invertir el orden de sus caracteres.
#include <iostream>

void invertir_con_for(char *cad);
void invertir_con_recursividad_1(char *ori, char *des, int pos);

int main(int argc, char *argv[])
{
	if (argc > 1) {
		std::cout << "La cadena a invertir es:" << argv[1] << std::endl;
		char *cadena = new char[strlen(argv[1])];
		std::strcpy(cadena, argv[1]);
		invertir_con_for(cadena);
		std::cout << "Y la invertida, mediante un bucle for, es:" << cadena << std::endl;
		std::strcpy(cadena, argv[1]);
		char *nuevacadena = new char[strlen(argv[1])];
		nuevacadena[strlen(argv[1])] = '\0';
		invertir_con_recursividad_1(cadena, nuevacadena, 0);
		std::cout << "Y la invertida, mediante recursividad, es:" << nuevacadena << std::endl;
		//delete cadena;
	}
	std::cout << "Fin." << std::endl;
	return 0;
}

void invertir_con_for(char *cadena) {
	char *tmp = new char[strlen(cadena)];
	std::strcpy(tmp, cadena);
	int j = 0;
	for (int i = strlen(cadena) - 1; i > -1; i--) {
		cadena[j++] = tmp[i];
	}
	cadena[j] = '\0';
	//delete tmp;
}

void invertir_con_recursividad_1(char *origen, char *destino, int posicion) {
	int l_cad = strlen(origen);
	if ( posicion < l_cad) {
		destino[posicion] = origen[l_cad - posicion -1];
		invertir_con_recursividad(origen, destino, ++posicion);
	}
}

:">


Más información sobre la lista de distribución Cconclase