No se como resolver esto... Hola buenas, soy nuevo en el foro y que mejor que empezar con una pregunta jejeje.
Tengo que hacer estos dos ejercicios y por más que le de vueltas a la cabeza no consigo sacarlos... a ver si podéis echarme un cable(Entiendo que resolverme los dos sea un poco coñazo, ya que son algo complicados... Asi que aunque resolvierais uno me ayudariais mucho!). Los enunciados son estos:
---Se dice que un número es diabólico si, en base 2, tiene un número impar de ceros. Algunos
ejemplos: el 0, el 2 (10), el 5 (101), el 6 (110), el 8 (1000), el 11 (1011), el 13 (1101).
a. Escribir un método recursivo, diabolico, tal que, dado un número entero n ≥ 0, verifique
si n es un número diabólico. La cabecera del método será la siguiente:
public static boolean diabolico (int n).
---Dado un número real x ≥ 0 se puede considerar que otro número real y ≥ 0 es la raíz cuadrada
de x con una cierta precisión, dada por otro número real e (positivo y de valor pequeño), si se
cumple que: √x – y ≤ e, o bien si se cumple que: x – y2 ≤ e.
Escribir un método recursivo, raiz, tal que, dado un número real x ≥ 0 y otro número real e ≥
0, calcule la raíz cuadrada de x con una precisión e.
Para facilitar el diseño recursivo del método, téngase en cuenta las siguientes consideraciones:
- El resultado, y, raíz cuadrada de x, se buscará dentro de un determinado intervalo de valores
[inf, sup]. Por ello, la cabecera del método será la siguiente:
public static double raiz (double x, double e, double inf,
double sup)
- En cada llamada al método, se verificará si el valor central o medio (llamémoslo med) del
intervalo [inf, sup] considerado cumple la condición x – y2 ≤ e. Si así fuera, dicho valor,
med, sería la solución.
- En caso contrario, habría que determinar si hay que buscar la raíz cuadrada en el subintervalo
[inf, med] o en el subintervalo [med, sup], dependiendo del signo que tuviera la expresión
x – y2. Con ello, se estaría estableciendo cómo sería la llamada recursiva.
- Finalmente, hay que determinar cuáles son los valores adecuados para delimitar el intervalo
inicial de búsqueda. Resulta bastante evidente que un buen valor inicial de inf sea 0. En
cuanto a sup, podría pensarse que su valor inicial fuera x, considerando que x2 ≥ x, pero
esto sólo es cierto si x ≥ 1. Por tanto, hay que elegir como valor inicial de sup el máximo
de los valores {1, x}.
- Teniendo en cuenta lo anterior, convendrá implementar un método no recursivo, que sirva
de lanzadera del método recursivo anterior, y cuya cabecera será:
public static double raiz (double x, double e).
Gracias de antemano. |