Recursividad en Java
Dado un grupo de letras, imprimir todos los acrónimos posibles. Todas las combinaciones donde no se repitan las letras.
Por ejemplo: {a,b,c} => abc; acb; bac; bca; cab; cba
public class Combina {
public static void main(String[] args) {
String cadena = "ABC";
combinaciones(cadena);
}
public static void combinaciones(String str) {
// Inicialmente se llama a la función sin prefijo y con la cadena completa
combinaciones("", str);
}
private static void combinaciones(String prefijo, String str) {
int n = str.length();
String b,c;
char a;
if (n == 0)
System.out.println(prefijo);
else {
for (int i = 0; i < n; i++){
// Se vuelve a llamar a la función con el prefijo (inicialmente null) más la siguiente letra de la cadena.
//
a = str.charAt(i);
b = str.substring(0, i);
c = str.substring(i+1, n);
combinaciones(prefijo + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
}
}
}
}
Multiplicación Rusa en forma recursiva
int mulRusa(int A, int B) {
if(A==1)
return (B);
if(A%2!=0)
return(B+mult_rusa( A/2 , B*2));
else
return(mult_rusa( A/2 , B*2));
}