En lo referente a fflush(stdin): el estándar dice que fflush solo es para flujos de salida así que depende del compilador que funcione o no. Cómo norma general no deberías usarlo.
En cuanto a la recursividad: sí, está bien hecha. Tiene una condición de parada, una llamada que actualiza un estado para que active la condición de parada en el momento oportuno y un trabajo a cumplir.
Lo que hace es escribir en pantalla: Entrando en el sueño del suelo... repitiendo tantas veces del sueño como se hayan indicado en el argumento de llamada.
Por cierto, no destroces el lenguaje con x y e. El español es un de los lenguajes más ricos que existen.
Entonces es mejor usar cin.ignore(); para evitar el error con ingreso de cadenas? te pongo este ejemplo, porque luego de ingresar la variable entera dni, me guarda el ENTER en el buffer
main()
{ int dni;
tcad nombre;
cout << "Ingrese DNI: ";
cin >> dni;
//fflush(stdin); Aca viene el error
cout << "Ingrese nombre: ";
gets(nombre);