[ Foro de C ]
alguien me podria dar un ejemplo de una funcion recursiva de dos cadenas y que regrese la concatenacion de las mismas
Piensa en las dos cosas que necesitas para una función recursiva:
- Caso base: ¿cual es la concatenación más simple posible? (por ejemplo, que la segunda cadena tenga 0 letras).
- Caso general: ¿cómo se pasa del caso n al n-1? (por ejemplo, si ya has concatenado las dos primeras letras, cómo concatenarías lo que queda a partir de la tercera).
Pon lo que se te ocurre y te ayudamos con ello.
mira esto es lo que se me ocurre pero me disen que esta mal
int fun(int s1[10], s2[10], int i;
{
int s1s2[10];
if(i<5){
s1s2[i]=s1[i]*s2[i];
i++;
fun(s1,s2,i);
}
return s1s2;
}
Es que tu función tiene varios errores:
- Por una parte, si te dicen que recibe dos cadenas, normalmente es porque esperan que reciba dos cadenas y nada más, y tú estás pasando dos cadenas y un número, que supongo que será la longitud.
- Por otra parte, no necesitas pasar la longitud, porque se puede saber con "strlen".
- Además, una cadena de caracteres será un array de "char", no de "int".
- En el interior de la función, no entiendo la lógica que pretendes y no hay comentarios que la aclaren. Por ejemplo, no sé porque creas una supuesta cadena de tamaño 10 (que debería ser 20) ni por qué compruebas si el valor de "i" es 5...
- Multiplicas dos números, en vez de concatenar.
- El valor de "i" aumenta, cuando lo habitual en una función recursiva es reducir el tamaño del problema.
- Llamas de forma recursiva a la función "fun", pero ignoras el valor devuelto.
- Devuelves un array de enteros, cuando el prototipo de la función dice que vas a devolver un entero...
Parece que tengas los fundamentos poco claros. Deberías mirar el manejo de cadenas de caracteres, por ejemplo aquí:
http://www.aprendeaprogramar.com/mod/resource/view.php?id=615
y también la recursividad y la creación de funciones, aquí y en los apartados anteriores:
http://www.aprendeaprogramar.com/mod/resource/view.php?id=644
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)