Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

３乗根

$x^3 = q$ の解は漸化式 $x_{n+1} = x_n - \frac{x_{n}^3 - q}{3x_{n}^2}$ を計算していくことで近似的に求めることができます。

$x_1$ に正の数 $\frac{q}{2}$ をいれ

$x_2 = x_1 - \frac{x_{1}^3 - q}{3x_{1}^2}$、$x_3 = x_2 - \frac{x_{2}^3 - q}{3x_{2}^2}$、…　と計算します。

この計算をしながら、

$|x^3 - q|$ の値が、十分小さくなったところで、計算をやめ、最後に計算した $x_n$ を $x^3 = q$ の近似解とします。

この方法に従って、入力された正の整数 $q$ に対し、 $q$ の３乗根の近似値を出力するプログラムを作成してください。ただし、「十分小さくなった」という判定は $|x^3 - q| < 0.00001 q$ を用いてください。

入力

複数のデータセットが与えられる。各データセットに $q$ ($1 \leq q < 2^{31}$)（整数）が一行に与えられる。入力の終わりは -1 である。

データセットの数は 50 を超えない。

出力

各データセットに対して $x$ （実数）を１行に出力する。出力結果に 0.00001 以下の誤差を含んでもよい。

Sample Input

15
15
-1

Output for the Sample Input

2.466212
2.466212

Solution in JAVA (judge verdict: Time Limit Exceeded)

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

			while (sc.hasNext()) {
				double res = 0.0;
				int q = sc.nextInt();

					if (q < 0) {
						break;
					}

					for (int i = 2; Math.abs(f(i , q)) >= 0.00001 * q; i++) {
						res = x(i, q);
					}

				System.out.println(res);
			}

		sc.close();
	}

	private static double x(int n, double q) {

		if (n == 1) {
			return q / 2;
		} else {
			return x(n - 1, q) - f(n - 1, q) / ( 3 * Math.pow( x(n - 1, q), 2) );
		}
	}

	private static double f(int i, double q) {
		return  Math.pow( x(i, q), 3) - q;
	}

}