Bienvenido al Curso

1

Introducci贸n al curso b谩sico de algoritmos y estructuras de datos

Introducci贸n a los algoritmos

2

驴Qu茅 entiende una computadora?

3

Lenguajes de programaci贸n

4

Estructuras de datos

5

驴Qu茅 es un algoritmo?

6

Metodolog铆a para la construcci贸n de un algoritmo

7

Variables y tipos de datos

8

User defined data types

9

Instalando Ubuntu Bash en Windows

10

Creando nuestro user defined data type

11

Abstract Data Types b谩sicos: Lists, Stacks, Queues

12

Explicaci贸n gr谩fica Data Types b谩sicos

13

Glosario de funciones para Abstract Data Types

14

Clases y objetos

15

Creando tu primera Queue: Arrays

16

Creando tu primera Queue: implementaci贸n.

17

Creando tu primera Queue: implementar la funci贸n enQueue

18

Creando tu primera Queue: implementar la funci贸n deQueue

19

Creando tu primera Queue: main code

Algoritmos de ordenamiento

20

Algoritmos de ordenamiento

21

Bubble sort

22

Bubble sort: implementaci贸n

23

Bubble sort: main code

24

Insertion sort

25

Desaf铆o: implementa un algoritmo de ordenamiento

Recursividad

26

Recursividad

27

La funci贸n Factorial, calculando el factorial recursivamente

28

Manejo de cadenas de caracteres

29

Arte: Generando arte recursivo

Divide and conquer y programaci贸n din谩mica

30

Divide and Conquer (divide y vencer谩s)

31

Qu茅 es la programaci贸n din谩mica (divide y vencer谩s v2.0)

32

MergeSort

33

Desaf铆o: Buscar el algortimo m谩s r谩pido de sort

34

Implementando QuickSort con Python

35

Implementando QuickSort con Python: main code

Algoritmos 'Greedy'

36

Qu茅 son los Greedy Algorithm

37

Ejercicio de programaci贸n greedy

38

Ejercio de programaci贸n greedy: main code

Grafos y 谩rboles

39

Grafos y sus aplicaciones

40

脕rboles

驴C贸mo comparar Algoritmos?

41

C贸mo comparar algoritmos y ritmo de crecimiento

驴Qu茅 sigue?

42

Cierre del curso y siguientes pasos

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Manejo de cadenas de caracteres

28/42
Recursos

Los algoritmos son agn贸sticos al lenguaje. Esto significa que podemos dise帽ar algoritmos con diagramas de flujo (o cualquier otra metodolog铆a) y funciona a la perfecci贸n sin importar el lenguaje de programaci贸n que queramos usar.

En esta clase vamos a implementar un algoritmo para voltear una cadena de caracteres con el lenguaje Java.

Aportes 112

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Para ser un 鈥淐urso B谩sico de Algoritmos鈥 no ve铆a la necesidad al inicio de implementar los algoritmos en alg煤n lenguaje, debido a que se puede (y se deber铆a) hacer todo un curso completo de introducci贸n a los algoritmos sin necesidad de tocar c贸digo, pero bueno imagino que su fin pedag贸gico tendr谩. Sin embargo, ya tocar dos lenguajes en un curso introductorio me parece muy inadecuado, hay muchos alumnos que a煤n no saben programar y por eso precisamente est谩n iniciando con Algoritmos como para complicarles m谩s el aprendizaje. Algunas personas dir谩n que el lenguaje no importa, bueno es verdad, no importa para alguien que ya sabe programar, pero para los que no, si importa.

La funci贸n StringReverse en JavaScript 馃槑:

PD hice el ejercicio solito pero dejo el link con la explicaci贸n larga y super comentada 馃槍馃槵.

  1. M茅todo JavaScript es 鉂わ笍:
function reverseString(str) {
	var strToArray = str.split(""); // cada letra es una posici贸n
	var reverseArr = str.reverse(); // JAJAJAJA
	var arrayToStr = str.join("");

	return arrayToStr;
}

reverseString("Algoritmos"); // "somtiroglA"
  1. Recursividad 馃攤:
function reverseString(str) {
	if (!str.length) { // `str.isEmpty()` no existe :(
		return str;
	}

	var strFirstPos - str.charAt(0);
	var strWithoutFirstPos = str.substr(1); // substring

	return reverseString(strWithoutFirstPos) + strFirstPos;
}

reverseString("Algoritmos"); // "somtiroglA"
  1. Ciclos 馃攣:
function reverseString(originalStr) {
	var reversedStr = "";

	for (var i = originalStr.length - 1; i >= 0; i--) {
		reversedStr = reversedStr + originalStr[i];
	}

	return reversedStr;
}

reverseString("Algoritmos"); // "somtiroglA"

Si no s茅 nada de Java se me hace imposible entender algo de esta clase.

Un poco m谩s dif铆cil sobre todo si ven铆amos utilizando C y de pronto nos cambia a Java, creo que no hab铆a necesidad.

Python

def reverseString(string):
    if string == "":
        return string
    else:
        return reverseString(string[1:]) + string[0]

No me gusta c贸mo explica Ricardo Celis, lo que hace el m茅todo substring no es devolverte el 铆ndice del String, sino devolverte el String desde el 铆ndice que tenga como par谩metro. Ejemplo:
String hi = 鈥淗ello鈥;
System.out.println(hi.substring(1)); //devuelve ello
System.out.println(hi.substring(3)); //devuelve lo

No es recursividad, pero Python hace esto s煤per f谩cil 馃槄 con s贸lo una instrucci贸n:

def reverse_string(string):
    return string[::-1]

y con recursividad ser铆a de esta manera:

def reverse_string2(string):
    if not string:
        return string
    return reverse_string2(string[1:]) + string[0]

Esta clase asume que uno ya tiene conocimientos un poco m谩s avanzados. No me gusto ni 5.

Kotlin:

fun main(args: Array<String>) {
    val str = "Cuando Reguil贸n es titular en La Liga: 12 victorias y 1 derrota."
    println(str.reverseString())
}

fun String.reverseString():String{
    return if(this.isEmpty()){
        this
    }
    else{
        this.substring(1).reverseString() + this[0]
    }
}

Seria interesante y una ventaja para nosotros los estudiantes, si Platzi introduce a los cursos una clase de pre-requisito para hacer los cursos, por ejemplo, el curso b谩sico de algoritmos he visto que necesita tres cursos antes de iniciar este:

  • Curso de Pensamiento L贸gico

  • Curso de Introducci贸n a Lenguaje C

  • Curso de Programaci贸n Orientada a Objetos

Mala idea eso de cambiar el lenguaje, complica las cosas inecesariamente. 馃憥

Yo nunca he programado nada de Java, y esto se me hace un poco fuera de la ruta

Aqu铆 c贸digo en JS:

Comparto el sentimiento de muchos compa帽eros en cuanto a: Trat谩ndose de un curso de algoritmos b谩sicos, Ricardo no se toma el tiempo necesario para hacer las pruebas en frio, adem谩s de incluir hasta el item 28 dos lenguajes de programaci贸n. Creo que deber铆an hacer un curso de algoritmos b谩sicos, para las personas que tienen poco o nulo conocimiento en programaci贸n.

/**
     * <h1>reverseString</h1>
     * Se invierte el contenido del String mediante recursi贸n
     * Ejemplo: "Keko kaka"
     *
     * La primera parte de la recursion y las llamadas anidadas del m茅todo.
     *
     * 1.-rts = "eko kaka" + K
     * 2.-rts = "ko kaka" + e
     * 3.-rts = "o kaka" + k
     * 4.-rts = " kaka" + o
     * 5.-rts = "kaka" + " "
     * 6.-rts = "aka" + k
     * 7.-rts = "ka" + a
     * 8.-rts = "a" + k
     * 9.-rts = "" + a
     *
     * La segunda parte del m茅todo recursivo.
     * El m茅todo topa con el 'if' y la llamada al m茅todo m谩s 'alta' se retorna
     * automaticamente.
     *
     * 9.- rts " " + a = a
     * 8.- rts "a" + k = ak
     * 7.- rts "ka" + a = aka
     * 6.- rts "aka" + k = akak
     * 5.- rts "kaka" + ' ' = akak
     * 4.- rts " kaka" + o = akak o
     * 3.- rts "o kaka" + k = akak ok
     * 2.- rts "ko kaka" + e = akak oke
     * 1.- rts "eko kaka" + K = akak okeK
     * */
    public String reverseString(String str) {
        if (str.isEmpty()) {
            return str;
        } else {
            String rts = reverseString(str.substring(1)) + str.charAt(0);
            return rts;
        }
    }

En C++ usando std::string:

string inverse(string inp) {
	if(inp.length() == 1)
		return inp;
	string last = inp[inp.length() - 1];
	inp.pop_back();
	return (last + inverse(inp));
}

En C o C++ usando array de chars y librer铆a string.h:

char* inverse(char* inp) {
	char* out;
	if(char[1] == '\0') {
		out = new char[2];
		strcpy(out, inp);
		return out;
	}
	char* aux = inverse(inp+1);
	int n = atrlen(aux);
	out = new char[n];
	strcpy(out, aux);
	out[n+1] = inp[0];
	delete aux;
	return out;
}

Haskell:

reverseString "" = ""
reverseString str = reverseString (tail str) ++ [head str]

main = do
  putStrLn (reverseString "Algoritmos")

Se puede probar en https://repl.it/languages/haskell


Eso si, creo que haskell es m谩s r谩pido insertando elementos al principio de una lista que al final, hasta hay un operador para eso:

reverseString "" = ""
reverseString str = last str : reverseString (init str)


Fuente de la imagen: http://learnyouahaskell.com/starting-out

En C

#include <stdio.h>
#include <string.h>
 
void revertir(char * cadena)
{
	unsigned int i = 0;
	char temp = '\0';
	unsigned int len = strlen(cadena);
 
	for (; i < len / 2; i++)
	{
		temp = cadena[i];
		cadena[i] = cadena[len - i - 1];
		cadena[len - i - 1] = temp;
	}
}
 
int main(int argc, char * argv[])
{
	char cadena[] = "Platzi";
 
	printf("%s\n", cadena);
	revertir(cadena);
	printf("%s\n", cadena);
 
	getchar();
	return 0;
}

Me queda algo confuso el uso de los 2 m茅todos para poner en reversa una cadena鈥 pero en esta liga (que ya fue proporcionada por juandc pero no funciona) se explica m谩s a detalle y logras entender por si quedan dudas.

No tengo ninguna experiencia previa con java y honestamente me costo mucho extraer la l贸gica del c贸digo, me guie por los ejemplos en los comentarios principalmente. a simple vista java parece muy complicado.

No es necesario poner el else en el metodo reverseString, y se puede ahorrar el instanciar el objeto volviendo el metodo estatico. Asi lo hice yo

public class caracteres {

    public static String reverseString (String str){

        if (str.isEmpty())
            return str;

        System.out.println(str.substring(1));
        return reverseString(str.substring(1)) + str.charAt(0);
    }

    public static void main(String args[]) {
        String texto = "Hola mundo";
        String textoReversed;

        textoReversed = reverseString(texto);
        System.out.println(textoReversed);
    }
}

Codigo de String Reverse en ELIXIR

Un interesante lenguaje, un interesante paradigma

defmodule ReverseString do
  def reverse(str) when str == "" do
    ""
  end

  def reverse(str) do
    [ head | tail ] = String.graphemes(str)
    reverse(List.to_string(tail)) <> head
  end
end

Forma de Ejecucion

ReverseString.reverse("Hello World!") # !dlroW olleH

Mi clase y funci贸n en C# para invertir cadenas de caracteres,

    class StringReverse
    {
        /// <summary>
        ///  Funcion para invertir cadenas de caracteres. (String)
        /// </summary>
        /// <param name="p_cadena"> Cadena de caracteres a invertir. </param>
        /// <returns></returns>
        public static String InvertirString(String p_cadena) {

            String resultado = String.Empty;

            if ( String.IsNullOrEmpty(p_cadena) ) {

                resultado = String.Empty;

            }
            else
            {
                resultado = InvertirString(p_cadena.Substring(1)) + p_cadena[0];
            
            }

            return resultado;

        }//public static String InvertirString() 

        // Para ejecutar en el main
        // Invertir String
        // Console.WriteLine( StringReverse.InvertirString("Nunca pares de aprender.") );


    }// Fin de : class StringReverse```

Comparto mi implementaci贸n en Python:

def invertirCadena(cadena):
    if cadena =="":
        return ""
    return cadena[-1]+invertirCadena(cadena[:-1])

if __name__ == "__main__":
    
    cadena = input("Escriba una cadena para invertir los caracteres: ")
    cadena = invertirCadena(cadena)
    print(cadena)

Hay alg煤n otro curso donde se pueda aprender Recursividad? Porque ac谩 no entend铆 nada sinceramente. Quiz谩 haya que tomar otro curso antes de entrar a este cierto? Porque todo el tiempo dice 鈥淭u sabes鈥

Esta bueno el curso, pero si creo que deber铆an de quitarle el 鈥淏谩sico鈥 del nombre, hay varios conceptos muy pesados, y si creo que se deber铆an tener algunas bases de POO para entenderle al cien.

Comparto apuntes con Python entendiendo con ciclos y recursividad

Una manera de inveritr una cadena en Java, mas simple es con la clase StringBuildery el metodo reverse() ejemplo:

public static void main(String[] args) {
StringBuilder cadena = new StringBuilder();
		cadena.append("java");
		cadena.reverse();
		System.out.println(cadena);
}

console

avaj

Les comparto mi soluci贸n, usando C.
Saludos!

Fue un laburo pero creo que lo logr茅 con Python:

def inversa(texto):
    
    if isinstance(texto, str):
        resultado = ''

        for i in range(len(texto) -1, -1, -1):
            resultado += texto[i]
        return resultado
    else:
        raise TypeError('No hay cadena de caracteres.')

frase = str(input('Dame una cadena de caracteres para invertir: '))

try:
    resultado = inversa(frase)
    print(f'Original: {frase}')
    print(f'Inversa: {resultado}')
except TypeError as e:
    print('Error: ', e)

En realidad, la funci贸n 鈥渞everseString鈥 si se pod铆a llamar igual que la clase. Simplemente, se pone la letra inicial en min煤scula.

public class StringReverse {
	public String stringReverse(...) {
	...
	}
	...
}

Mi aporte en python

def invString(cadena, n):
    
    if n == 0:
        return cadena

    return  cadena[n] + invString(cadena[:n], n - 1)



def run():
    cadena = input("Ingresa una cadena de texto --> ")
    n = len(cadena) - 1
    print(invString(cadena, n))


if __name__ == "__main__":
    run()

Definitivamente deber茅 tomar los cursos de Java xD

Para los fan谩ticos de la terminal como yo y que a su vez sea la primera vez que escriben c贸digo java, para compilar es as铆:

javac StringReverse.java

y para ver el output es:

java StringReverse

public class StringReverse {

  public String reverseString(String str){
    if(str.isEmpty()){
      return str;
    } else {
      return reverseString(str.substring(1)) + str.charAt(0);
    }
  }

  public static void main(String[] args){
    StringReverse obj = new StringReverse();
    String result = obj.reverseString("Algorithms r lof ");
    System.out.println(result);
  }

}

Mi aporte.

#Recursiva
def stringReverse(str):
    if not str:
        return str
    else:
        return stringReverse(str[1:])+str[0]

print(stringReverse("algoritmos"))

#Ciclos
def reverseString(str):
    array = ""
    str = list(str)
    while str:
        array = array + str[-1]
        str.pop(-1)
    return array

print(reverseString("algoritmos"))```

public class StringReverse {

public String strReverse(String cadena){

  if(cadena.isEmpty()){
      return cadena;
  }else{
      return strReverse(cadena.substring(1))+cadena.charAt(0);
  }

}

public static void main(String[] args) {

    StringReverse obj = new StringReverse();
    String cadena = obj.strReverse("!IZTALP htiw gnimmargorp nrael ot evol I");
    System.out.println(cadena);
}

}

SALIDA
run:
I love to learn programming with PLATZI!

En Python:


def reverse_string(string):
    if not string:
        return string
    else:
        return reverse_string(string[1:]) + string[0]

if __name__ == '__main__':
    string = "Algoritmos"
    reversed_string = reverse_string(string)
    print(string)
    print(reversed_string)
public class StringReverse{

    public String reverseString(String str){
      if (str.isEmpty()){
            return str;
        } else{
            return reverseString(str.substring(1))+str.charAt(0);
      
        }  
    } 
    public static void main(String[] args){
        StringReverse obj = new StringReverse();
        String result = obj.reverseString("Algorithms are love");
        System.out.println(result);
    }
    }

const reverseStringRec = (txt: string): string => {
  if (txt === '') return txt;
  return txt.charAt(txt.length -1 ) + reverseStringRec(txt.substring(0, txt.length - 1))
}
cad = input("Ingrese una cadena: ")
cad_inv = cad[::-1]
print(cad)
print(cad_inv)```

Gracias clases de python en platzi:

def stringReverse(phrase):
    if not phrase:
        return phrase

    return stringReverse(phrase[1:]) + phrase[0]
using System;

namespace CharactersWithRecursion
{
    class Program
    {
        static void Main(string[] args)
        {
             string str = ReverseString("Hello World!");
            Console.WriteLine(str);
        }

         static string ReverseString(string str)
         {
             if(string.IsNullOrEmpty(str))
             {
                 return str;
             } else{

                return ReverseString(str.Substring(1))+ str[0];
             }
              
               
         }
    }
}

me daba miedo que se me tragara la memoria del sistema

import logging
logging.basicConfig(level=logging.INFO)
def invertir_caracter(caracter,longitud):
    if longitud==0:
        return ''
    return caracter[longitud-1]+invertir_caracter(caracter,longitud-1)
caracter='pokemon'
caracter_invertido=invertir_caracter(caracter,len(caracter))
logging.info('el inverso de {} es {}'.format(caracter,caracter_invertido))```

Diablos hab铆a olvidado c贸mo se compilaba y ejecutaba Java en CMD jaja! Excelente clase!

No sab铆a sobre ese compilador y ejecutador de c贸digo de Java en linea, cada d铆a se aprenden m谩s cosas.

Se me hizo interesante en C

#include<stdio.h>
#include<string.h>
 
void revertir(char * cadena)
{
	unsigned int i = 0;
	char temp = '\0';
	unsigned int len = strlen(cadena);
 
	for (; i < len / 2; i++)
	{
		temp = cadena[i];
		cadena[i] = cadena[len - i - 1];
		cadena[len - i - 1] = temp;
	}
}
 
int main(int argc, char * argv[])
{
	char cadena[] = "Hola a todos";
 
	printf("%s\n", cadena);
	revertir(cadena);
	printf("%s\n", cadena);
 
	getchar();
	return 0;
}```
public class StringReverse {

    public String reverseString(String str) {
        if(str.isEmpty()) {
            return str;
        }
        else {
            return reverseString(str.substring(1)) + str.charAt(0);
        }
    }
    public static void main(String[] args) {
        StringReverse obj = new StringReverse();
        String result = obj.reverseString("Algorithms are love");
        System.out.println(result);
    }
}```

Ejemplo en reverse string en JS de forma recursiva y por medio de ciclos

const reverse = str => {
  let result = ''
  for (let i = str.length - 1; i >= 0; i--) {
    result += str[i]
  }
  return result
}

const reverse = str => str.length ? (str.substring(str.length - 1) + reverse(str.substring(0, str.length - 1))) : ''

En javascript tambien hay una forma de hacer esto facil usando built-in functions, asi:

let cadena = 'Platzi';

// Con el split('') convierto la cadena en un array separando la cadena caracter por caracter
// Con el metodo reverse se puede invertir un array, ya que la cadena es un array, puedo utilizar dicho metodo 
// Y con el metodo join('') puedo unir todas las posiciones del array en una cadena, teniendo asi la misma cadena pero al reves
let cadena_al_reves = cadena.split('').reverse().join('');
// iztalP

Pero como la clase es de recursion, trate de usar la menor cantidad de built-ins (aunque peque de usar slice para no concatenar manualmente)

Este es mi codigo:

function reverseAString(inputString, outputString = '') {
 let size = inputString.length;
 if (size === 0) { // Si ya saque todos los caracteres de la cadena de entrada, procedo a devolver la cadena con los caracteres invertidos, esta es mi condicion de parada
   return outputString;
 } else { // si no, llamo a la funcion nuevamente, enviando como cadena de entrada la cadena de entrada sin el ultimo caracter y como cadena de salida concateno cada ultimo caracter, asi voy sacando los caracteres de derecha a izquierda
   return reverseAString(inputString.slice(0, size - 1), outputString + inputString.slice(size-1));
 }

Creo que le tengo miedo a Java, por no aprenderlo me expulsaron de la escuela x.x

Otro enfoque en C:

#include <stdio.h>
#include <string.h>

int reverse(char* str, int start, int end) {
    if (strlen(str) - 1 < end) {
        return -1;
    }

    if (start < end) {
        char aux = str[start];
        str[start] = str[end];
        str[end] = aux;
        reverse(str, ++start, --end);
    }
    return 0;
}

int main() {
    char* str;
    printf("Set string to reverse\n");
    scanf("%s", str);
    int result = reverse(str, 0, strlen(str) - 1);
    if (result < 0) {
        printf("Error");
        return result;
    }
    printf("%s\n", str);
    return 0;
}```

Sufr铆 un poco por el tema del uso de min煤sculas donde no se deb铆an colocar, pero bueno, a la final logr茅 identificar el error y solucionarlo鈥 馃槂

public class StringReverse{

    public String reverseString(String str){
      if (str.isEmpty()){
          return str;
      } else {
          return reverseString(str.substring(1))+str.charAt(0);
        }
    }
    public static void main(String[] args) {
        StringReverse obj = new StringReverse();
        String result = obj.reverseString("Algorithms are love");
        System.out.println(result);
    }
}

C贸digo en Python con recursividad:

#-*- coding: utf-8 -*-

def reverse_str(string):
       
    if not string:
        return string
        
    else:
        return reverse_str(string[1:])+string[0] 

if __name__ == "__main__":
    print(' ESTE SOFTWARE DEVUELVE EL INVERSO DE LO QUE ESCRIBAS')
    print('******************************************************')
    print('')
    cadena = str(input('Escribe lo que quieras: '))
    print('Lo que escribiste al r茅ves: {}'.format(reverse_str(cadena)))

Mi versi贸n del c贸digo en c++:

#include <iostream>

using namespace std;
int n, c=0;
int i=0, j;
char frase[50];
int conteo(char frase[]){
	int contador = 0, j=0;
	while (frase[j] != '\0'){
		contador += 1;
		j++;
	}
	return contador;
	
}
void cambioPosicion(){
	if(c<n/2){
	char temp;
		temp = frase[i];
		frase[i]=frase[j];
		frase[j]= temp;
		i++;j--;c++;
			cambioPosicion();}
}
int main(){
	cout<<"Escribe la frase:"<<endl;
	cin>>frase;
	n = conteo(frase);
	 j=n-1;
	cambioPosicion();
	cout<<frase;
}

no me deja correr ningunos de los ejercicios que hago

Python y su simpleza

string = "Hola a todos"

print(string[::-1])
public class StringReverse{

    public String reverseString(String str){
        if(str.isEmpty()){
            return str;
        }else{
            return reverseString(str.substring(1))+str.charAt(0);
        }
    }
    public static void main(String[]args){
        StringReverse obj = new StringReverse();
        String result = obj.reverseString("脛lgorithms are love");
        System.out.println(result);
    }   

}```

En Javascript.

document.write("<br>Poner al revez un string<br><br>");

		

		function reverse(str){
			if(str.length){//length devuelve 0 si le mandan un cadena vacia osea false.
				return str.substring(str.length-1)+ reverse(str.substring(0, str.length-1));
			}else{
				return str;
			}
		}
		
		document.write(reverse("love"));


		document.write("<br>Poner al revez un string con ciclos<br>");

		var str= "love";
		var result="";
		for(i=str.length-1; i>=0; i--){
			result+= str[i];
			
		}
		document.write("<br>"+result);```
public class Characters
{
	public static void main(String[] args)
	{
		Characters strings = new Characters();
		System.out.println(strings.ReverseString("Algorithms are love"));
	}
	
	public String ReverseString(String str)
	{
		if (str.isEmpty())
			return str;
		else
			return ReverseString(str.substring(1)) + str.charAt(0);
	}
}

Struggling with this challenge but I did it at the end.

import java.util.Scanner;

public class CadenaOrden {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Please insert the String you want to get written backwards: ");
        String cadena = in.nextLine();
        System.out.println("the word written backwards is: " + flipWord(cadena));

    }

    static String flipWord(String cadena){
        if(cadena.length() < 1){
            return "";
        }else{
            return (cadena.charAt(cadena.length()-1) + flipWord(cadena.substring(0, cadena.length()-1)));
        }
    }
}

The main difference between recursion and iteration is that the first one uses the same chunk of code, runing at different layers of our program. The iteration instead, makes differents executions over the same code over the same layer. Also, recursion goes deeper and deeper until the base case is achieved, iteration runs the same code until a condition is met.

se podr铆a hacer este programa de recursividad en C ya que que en C no se puede concatenar?

Muy bueno鈥 lo 煤nico es que el compilador de java, traduce el c贸digo a espa帽ol y queda muy raro, pero compilo perfectamente. Gracias!!

aqui mi version en C# tuve que hacer trampa y me base en el codigo de otro compa帽ero que uso C++ en los comentarios, generaba una serie de problemas porque no removia la ultima letra y Chasheava intente de todo hasta que lo consegui.

Resultado:

public class StringReverse
{
public String reverseString (String str)
{
if (str.isEmpty())
{
return str;
}
else
{
return reverseString(str.substring(1))+str.charAt(0);
}
}

public static void main(String[] args) 
{
    StringReverse obj = new StringReverse();
    String result = obj.reverseString("algoriths are love");
    System.out.println(result);
}

}

Mi versi贸n en Java.

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	    String message;
        Scanner inputKeyboard = new Scanner(System.in);
        System.out.println("Escriba el texto que desee ver al reves");
        message = inputKeyboard.nextLine();
	    String res = reorder(message);
        System.out.println(res);
    }

    public static String reorder(String word)
    {
        int wordLength = word.length();
        if(wordLength == 0)
        {
            return word;
        }

        char aux = word.charAt(wordLength-1);
        String newArray = word.substring(0, wordLength-1);

        wordLength = newArray.length();

        return aux + reorder(newArray);
    }
}

En C.

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

void reverse_string(char src[], char dst[], int base_size, int size)
{
	dst[base_size - size] = src[size];
	if (size > 0)
		reverse_string(src, dst, base_size, size - 1);
}


int main(const int argc, const char *argv[])
{
	char string[] = "Esto es una prueba";
	int size = sizeof(string)/sizeof(char);
	char string2[size];

	// size - 2 to skip \0
	reverse_string(string, string2, size - 2, size - 2);

	printf("%s\n", string2);
	return 0;
}
package recursividad;

public class StringReverse {
	
	// Regrese un string al reves
	public String reverseString(String str) {
		// Base case
		if ( str.isEmpty() ) {
			return str;
		}
		
		// Recurisve
		else {
			return reverseString( str.substring(1)) +  str.charAt(0) ;
		}
	}
	
	// Dirver
	public static void main(String[] args) {
		System.out.println("Algorithms are love");
		StringReverse obj = new StringReverse();
		String result = obj.reverseString("Algorithms are love");
		System.out.println(result);

	}

}
def reverse(string):
	if string == "":
		return string
	else:
		return reverse(string[1:])+string[0]

print(reverse("Algorithms are love"))

Intente hacer el reto, con C++, pues es el lenguaje que se mejor, pero tengo problemas con mi compilador, uso DevC++, pues no me lee la variable string.
por si gustan checarlo o ver si me falta algo anexo el codigo.

#include<stdio.h>
#include<string.h>
#include<iostream>


void reveseStr(string& str)
{
	int n = str.length();
	for(int i = 0 i < n/2; i++)
	{
		swap(str[i], str[n - i 1]);
	}
}
int main()
{
	string str = "loveReverse";
	StringReverse(str);
	return 0;
}

Tambien existe una version que se me hizo interesante en Phyton que es muy corta que da risa:

cadena = "reverseCool"
print (cadena[::-1])```

Falto bastante la explicacion de que hace exactamente substring y que parametros recibe, igualmente con charAt鈥 Tambien como funciona la 鈥渓ibreacion鈥 de los stacks acumulados

Para ejecutarlo por CLI, se puede usar el comando javac (teniendo instalado el jdk previamente) y luego correr el programa con el comando java

JAVA:

Esta es mi intergraci贸n en JS:

function reverseString(string, position) {
	let pos = position
  if (!position) {
  	pos = 0
  }
	if (pos === string.length - 1) {
  	return string[pos]
  }
  return `${reverseString(string, pos + 1)}${string[pos]}`
}

console.log(reverseString('Algorithms are love'))

Mi aporte en C:

#include <stdio.h>

void nameRev( char name[], int first, int last )
{
    char temp;

    if ( last > first )
    {
        temp = name[ last ];
        name[ last ] = name[ first ];
        name[ first ] = temp;
        // 
        // printf("La variable temp es: %c\n", temp );
        // printf("EL caracter en first %d es: %c\n", first, name[first] );
        // printf("EL caracter en last %d es: %c\n", last, name[last] );

        first++;
        last--;

        nameRev( name, first, last );
    }
     // return 1;
}

void printName( char name[] )
{
    printf("El nombre al rev茅s es %s\n", name);
}

int main(int argc, char const *argv[])
{
    char name[] = "ANITA LAVA LA TINA";
    int n = sizeof( name ) - 1;
    int first = 0;
    int last = sizeof(name) - 2;

    // printf("El primer caracter es: %d\n", first );
    // printf("El 煤ltimo caracter es: %d\n", last );

    printf("El nombre originalmente es %s\n", name );
    nameRev( name, first, last );
    printName( name );

    return 0;
}
```c
#include <stdio.h>

long result;
int n;

long factorial(int n)
{
    if(n == 0)
    {
        return 1;
    }        
    else
    {
      return (n* factorial(n -1)); /* code */
    }
}

int main()
{
    printf( "Ingrese el numero a calcular\n");
    scanf("%d", &n);
    if (n < 0 )
    {
        printf("El numero debe ser positivo\n");
    }
    else
    {
        result = factorial(n);
        printf("%d! = %ld \n", n, result);
    }
    return 0;
}

juliana@juliana-ubuntu:~/Documentos/Curso de algoritmos$ gcc recursividad.c -o recursividad
juliana@juliana-ubuntu:~/Documentos/Curso de algoritmos$ ./recursividad
Ingrese el numero a calcular
10
10! = 3628800

Hola. 驴como hago para configurar el path de java en VS code?

public class  StringReverse
{

  public String reverseString(String str)
  {
    if(str.isEmpty())
    {
      return str;
    }else{
      return reverseString(str.substring(1))+str.charAt(0);
    }
  }


    public static void main (String[] args)
    {
      StringReverse obj = new StringReverse();
      String result = obj.reverseString("Algorithms are love");
      System.out.println(result);
    }
}
public class StringReverse {
    public String reverseString(String str) {
        if(str.isEmpty()) return str;
        return reverseString(str.substring(1))+str.charAt(0);
    }

    public static void main(String[] args) {
        StringReverse sr = new StringReverse();
        String original = "I love potatoes";
        String reversed = sr.reverseString(original);
        System.out.println(original + " reversed is " + reversed);
    }
}

Me tom贸 un rato entenderlo

-public class StringReverse {
public String reverseString(String str){
if(str.isEmpty()){
return str;
} else{
return reverseString(str.substring(1))+ str.charAt(0);
}
}
public static void main(String[] args) {
StringReverse obj = new StringReverse();
String result = obj.reverseString(鈥渁lgoritmos aletas鈥);
System.out.printf(result);
}
}

realizado en C

AQUI EN PYTHON:
![](

definvertir_cadena(cadena):
    if cadena != "":
        return cadena[-1] + invertir_cadena(cadena[:-1])
    else:
        return""
        
print("hola")
print(invertir_cadena("hola"))```

En C++:
![](

#include <iostream>
#include <string>

using namespace std;

string invertir_cadena(const string &cadena){
    if(cadena[0]){
        auto n = cadena.size() - 1;
        return cadena[n] + invertir_cadena(cadena.substr(0,n));}
    else
        return "";

}

int main()
{
    cout << "hola "<< endl <<invertir_cadena("hola")<<endl;
    return 0;
}```

En C
![](

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

void reversa(const char *contenido,int tam,char *alrrevez){
    if(contenido == NULL)return;
    int i = strlen(contenido);
    char cadena[i];
    if(i > 0){
        strncpy(cadena,contenido,i -1);
        cadena[i-1] ='\0';
        alrrevez[tam - strlen(contenido)] = contenido[strlen(contenido)-1];
        reversa(cadena,tam,alrrevez);}

    else alrrevez[tam] = '\0';}

int main(void)
{
    char alrrevez[4];
    reversa("hola", 4,alrrevez);
    printf("hola alrrevez es %s\n",alrrevez);
    return 0;
}

Mi c贸digo en JS:

var text = "Texto al reves";
console.log(stringReverse(text));

function stringReverse(str) {
    //If the string is empty, return the same string
    if (str == "") {
        return str;
    }
    /* In JS we have a way to reverse a string and is using string.split("").reverse().join("") */
    return str.split("").reverse().join("");
}

Muy bien!!

En Python:

def reverse_str(string):
    separate = list(string)
    reverse = []
    i = len(separate)-1
    while i>=0:
        reverse.append(separate[i])
        i-=1

    reverse_org = ''.join(reverse) 
    
    print('As铆 queda tu string al r茅ves: {}'.format(reverse_org))
    
    


if __name__ == "__main__":
    print(' ESTE SOFTWARE DEVUELVE EL INVERSO DE LO QUE ESCRIBAS')
    print('******************************************************')
    print('')
    cadena = str(input('Escribe lo que quieras: '))
    reverse_str(cadena)

Dos algoritmos para voltear cadenas de texto en Python.
El primero es una propuesta de Daniela S que complete & el segundo es una mejora que hice con ayuda del primero.

** codigo en python**

string = "hola mundo"

nueva_cadena=[string[i*-1] for i in range(1, len(lista_string)+1) ]

print(nueva_cadena)

resultado:
[鈥榦鈥, 鈥榙鈥, 鈥榥鈥, 鈥榰鈥, 鈥榤鈥, 鈥 ', 鈥榓鈥, 鈥榣鈥, 鈥榦鈥, 鈥榟鈥橾

Buen ejercicio aunque no se de Java.

S煤per genial!!!

Que mal est谩n utlizando class para explicar en curso y no ahi ningun video que explique es class y un objeto

El ejercicio en C

#include <stdio.h>
#include <string.h>

void stringReverse(char * str);

int main(int argc, const char * argv[]){
	char buffer[100];
	printf("Introduce la cadena de texto que deseas revertir\n");
	scanf(" %99[^\n]%*[^\n]%*s", buffer);
	
	printf("Inversi贸n aplicada: ");
	stringReverse(buffer);

	return 0;
}

void stringReverse(char str[]){
	if(*str){
		stringReverse(str+1);
		printf("%c",*str);
	}
}

Hola,
Este es mi programa en C:

#include <stdio.h>
#include <math.h>
#include <string.h>

char message[] = "Hola mundo";

char *strflip(char *str)
{
    char str_temp[2]={'\0'};
    if(*str==0)
        return str;
    str_temp[0]= *str;
    return strcat(strflip(str+1),str_temp);
}

int main(int argc, char const *argv[])
{
    printf("Reversion de la cadena \"%s\":\n",message);
    printf("%s\n",strflip(message));
    return 0;
}

Esta clase si que me tomo tiempo para entender un poco mas sobre la recursividad.

No s茅 nada de Java segui el algortimo y me da error