Programación General > Java
error Exception in thread "main" java.lang.StackOver
tomas_sauron:
ahhhhhhhhhhhhhhhhh ya entndi !!! noc xq le pusist un bucle ??? recursividad es anti bucle !! por asi dcirlo <_<
o sea si usas recursividad no pods usar bucles ya sean for while do while xq lo q ac la recursividad s repetir varias vcs una llamada a una funcion (metodo ) hasta q una condicion d cort se cumpla y salga con 1 resultado
x ejemplo
--- Código: Java ---if (n==0){ n=1; return n; } else{ return factorial(n-1)*n aca factorial c llama el metodo
y se llama asi mismo restandole al argumento n una unidad (o sea n-1)y lo hace
hasta q n valga cero cuando n vale cero sale con un uno devuelve el resultado d acr 1*factorial(2)*factorial(3)*factorial(4) por eso
q no ac falta un while sino esta d mas por eso cicla infinitamente
espero t sirva sino ya sabs pregunta d vuelta !! [/color]
kas09013:
Muchas garcias! :) si ya ahora si corre bien , pero que cres! no hace lo que quiero creo que lo no hice bien por que no los acomoda como el ordenamiento de seleccion! o.O lo ordena como inserccion !u.U ya me estresee u.u empezzare de nuevo a crearlo si tienes un ejemplo de seleccion recursivo te lo agradeceria muucho. Sino de todas formas muchisiimas gracias :)
kas09013:
ya lo hicee! :) pero no me los ordena bien alguna idea?
import java.io.*;//Libreria De Java Para Ingresar Datos Desde Teclado
class SeleccionRecursivo2{// Nombre de La Clase
public static int Seleccion(int v[], int n){
int i, minimo,l;
if (n>=1) {
minimo=0;
for(i=1;i<n;i++)
if(v<v[minimo])
minimo=i;
i=v[0];
v[0]=v[minimo];
v[minimo]=i;
return Seleccion(v,n-1);
}else{
return 0;
}
}
public static void main(String args[])throws IOException{
BufferedReader res1=new BufferedReader(new InputStreamReader(System.in));
long tiempoInicio = System.currentTimeMillis();
int n;
int v[]=new int [15];//Declaracion De Arreglo
int res;// Declaracion De Variable
System.out.println ( "n||************** Metodo De Odenacion Seleccion **************|| n|| || ");
System.out.println ( "|| 1.-Cantidad De Numeros A Ordenar: ||");
System.out.print( "|| ");
n=Integer.parseInt(res1.readLine());//Lee Los Datos Introducidos Desde Teclado
System.out.println ( "|| 2.-Numeros A Ordenar: ||");
for (int i=0; i<n; i++){// Ciclo For Para Pedir que Indroduzca Los Valores
System.out.print( "|| ");
v=Integer.parseInt(res1.readLine());}// Lee y Almacena Los Datos Desde teclado En El Arreglo
System.out.println("|| 3.-Ordenacion De Numeros || n");
for (int i=0; i<n; i++){//Ciclo For Para La Ordenacion de Numeros
System.out.print("|");
System.out.print(v + "|");
}
System.out.println(" ");
res=Seleccion(v,n);//Llama All Metodo anterior Para Que Devuelva Datos
long totalTiempo = System.currentTimeMillis() - tiempoInicio;// Funcion Que Mide El Tiempo Y Calcula El Tiempo Total Empleado A Partir De La Diferencia Del Tiempo Inicial Y Final
System.out.println("n||El tiempo total de la ejecucion es :" + totalTiempo + " miliseg");
System.out.println ( "n||**********************************************************||");
}
} //fin clase seleccion recursivo
kas09013:
esto de recursividad no me sale, lo eh vuelto a cambiar por que no hacia bien los cambios si lo acomodaba pero no por orden de seleccion eh cambiado el codigo pero solo me imprime el primer cambio alguna sugerencia?
--- Código: Java --- import java.io.*;//Libreria De Java Para Ingresar Datos Desde Tecladoclass SeleccionRecursivo5{// Nombre de La Clasepublic static int Seleccion(int v[], int n, int m){int i=0, j, min, k, l; int cambio; if (m<n) { min=v[i];// Asignacion Del Valor En La Variable Min En El Arreglo a[i] k=0;// Asignacion De 0 A La Variable k cambio=0;//Asignacion de 0 A La Variable cambio for(j=m+1; j<n; j++)//For Para Seguir Ordenando Numeros if(v[j]<min)//If Que Compara Valor Del Arreglo a[j] Con min min=v[j];//Asignacion Del Valor De La Variable min En El Arreglo a[j] k=j;//Asigna Valor De k En j cambio=1;//A Cambio Le Asigna El valor De 1 if(cambio==1){// Comparacion Del Valor de Cambio v[k]=v[i];// Asignacion Del Valor Del arrreglo a[k] en a[i] v[i]=min;// Asignacion Del Valor Del Arreglo a[i] En La Variable Min System.out.println(" "); for (l=0; l<n; l++){// For Para Imprimir La Ordenacion De Los Numeros System.out.print("|"); System.out.print(v[l] + "|"); } } return Seleccion(v,n,m+1);}else{return 0;}}public static void main(String args[])throws IOException{BufferedReader res1=new BufferedReader(new InputStreamReader(System.in));long tiempoInicio = System.currentTimeMillis(); int n,m=0; int v[]=new int [15];//Declaracion De Arreglo int res;// Declaracion De Variable System.out.println ( "n||************** Metodo De Odenacion Seleccion **************|| n|| || "); System.out.println ( "|| 1.-Cantidad De Numeros A Ordenar: ||"); System.out.print( "|| "); n=Integer.parseInt(res1.readLine());//Lee Los Datos Introducidos Desde Teclado System.out.println ( "|| 2.-Numeros A Ordenar: ||"); for (int i=0; i<n; i++){// Ciclo For Para Pedir que Indroduzca Los Valores System.out.print( "|| "); v[i]=Integer.parseInt(res1.readLine());}// Lee y Almacena Los Datos Desde teclado En El Arreglo System.out.println("|| 3.-Ordenacion De Numeros || n"); for (int i=0; i<n; i++){//Ciclo For Para La Ordenacion de Numeros System.out.print("|"); System.out.print(v[i] + "|"); } System.out.println(" "); res=Seleccion(v,n,m);//Llama All Metodo anterior Para Que Devuelva Datos long totalTiempo = System.currentTimeMillis() - tiempoInicio;// Funcion Que Mide El Tiempo Y Calcula El Tiempo Total Empleado A Partir De La Diferencia Del Tiempo Inicial Y Final System.out.println("n||El tiempo total de la ejecucion es :" + totalTiempo + " miliseg"); System.out.println ( "n||**********************************************************||"); } } //f
kas09013:
:) gracias por tu ayudaa ya pude terminarlo :)
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa