<jupyter_start><jupyter_text><jupyter_code># 1. Suma recursiva de una lista de numeros enteros. 

import java.util.ArrayList;

public class SumaRecursiva_Lista {
 
	public static void main(String[] args) {
		
	
     ArrayList<Integer> listaNumeros = new ArrayList();
     
     listaNumeros.add(1);
     listaNumeros.add(3);
     listaNumeros.add(5);
     listaNumeros.add(6);
     listaNumeros.add(12);
     listaNumeros.add(13);
     listaNumeros.add(2);
     listaNumeros.add(9);
     
     System.out.println("\"Lista numeros\"");
     
     for (int i = 0; i < listaNumeros.size(); i++) {
		System.out.println(listaNumeros.get(i));
     }
  
     System.out.println("---------------------");
     System.out.println("La suma es: "+sumaRecursiva(listaNumeros)); 
     System.out.println("---------------------");
     
     System.out.println("\nVerificando si la lista esta vacia\n");
     
     if(listaNumeros.isEmpty()) {
    	 System.out.println("----->>>La lista esta vacia<<<------");
     }else {
    	 System.out.println("---->>>Hay elemento en la lista<<<<-------");
     }
  
	 }
	
	 static int suma = 0;
   
	 public static Integer sumaRecursiva(ArrayList<Integer> lista) {
		
		  int tamanio = lista.size(); // se guarda el tamaño de la lista
		
	    if(tamanio == 0){    // si la lista es vacia restorna la suma. 
	     	return suma; 
		  }
	    else{    // si la lista no esta vacia empieza a sumar.
	      suma += lista.get(tamanio-1);  // suma el ultimo numero. 
			  lista.remove(tamanio-1);   // elimina ese numero que sumamos.
			  sumaRecursiva(lista);   // se vuleve a llamar la funcion. 
		  }
		return suma;
	 }
	 
}

#2. Hacer un contador regresivo con recursión.

public class ContadorRegresivo {
	
	public static void main(String[] args) {
		
		System.out.println("Contador regresivo: \n");
		contadorRegresivo(20); 
		
	}

	public static void contadorRegresivo(int numero){
		if(numero == 0) { // Si el numero es igual a cero termina la recursividad. 
		   System.out.println(numero); // Se imprime el cero. 
		}else {
			System.out.println(numero); // se imprime el numero que recibe el parametro de la funcion.
			contadorRegresivo(numero-1); // se hace la recursividad. 
		}
	}
}

#Probleama 3: Sacar de un ADT pila el valor en la posición media.

import java.util.Stack;

public class SacarElvalor {
	
	public static void main(String[] args) {
	
		// Se crea la pila y se ingresan los valores. 
		Stack pila = new Stack();
		pila.push(1);
		pila.push(2);	
		pila.push(3);
		pila.push(4);
		pila.push(5);
		pila.push(6);
		pila.push(7);
		pila.push(8);
		pila.push(9);
		pila.push(10);
	
		System.out.println("Pila original");
		for (int i = pila.size()-1; i >= 0; i--) {
			System.out.println("["+pila.get(i)+"]"); //Se recorre la pila 
		}
		System.out.println("===============================");
		System.out.println("valor medio de la pila es : " +pila.get(pila.size()/2 - 1)); //Se encuetra el valor medio
		System.out.println("----------------------------------------------------");
		
		sacarMedio(pila, pila.size());
		
		System.out.println("Se saco el valor en la posición media de la pila");
		System.out.println("----------------------------------------------------");
		
		for (int i = pila.size()-1; i >= 0; i--) { //se recorre la pila para verifica si el numero esta fuera. 
			System.out.println("["+pila.get(i)+"]");
		}
	}
	
	static Stack pila2 = new Stack();
	
	public static void sacarMedio(Stack pila, int tamanio) { // recibe la pila y el tamaño de esta. 
		
    if(pila.size() == tamanio/2) { //  Si la pila ya esta en la mitad
			pila.pop(); // saca el elemento.
			
			for (int i = pila2.size()-1; i >= 0; i--) { // Se llena la pila1 con los elementos guardados en la pila2.
				pila.push(pila2.get(i));
			}
			
		}else {
			  pila2.push(pila.pop());// saca los elementos que estan en la cima y se guarda en la pila2 
			  sacarMedio(pila, tamanio); // se hace la recursividad. 
		}
	}

}<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup