Переполнение стека на рекурсии в алгоритме цепной дроби
Имеется рекурсивный код для вычисления цепной дроби:
import java.math.*;
import java.io.*;
import java.util.*;
public class ContinuedFraction {
public static void main(String args[ ]) {
double z= cep(1071/462);
System.out.println(z);
}
public static double cep(double drobchast)
{
if((1/drobchast) - (Math.ceil(1/drobchast) - 1) == 0) {
return 1/drobchast;
}
double celchast = Math.ceil(1/drobchast) - 1;
drobchast = 1/(celchast + (1/drobchast));
return cep(drobchast);
}
}
Попробую объяснить свою логику: условие
(1/drobchast) - (Math.ceil(1/drobchast) - 1) == 0
предполагает, что если перевернуть дробь и у нее не останется остатка (например, перевернём 1/7 и получим 7), значит дошли до конечной точки.
Иначе нужно передать единицу, деленную на отрезанную от дроби целую часть, плюс единицу, деленную на перевернутую дробь.
Сейчас при запуске моего кода выводится ошибка стека.