Имеется рекурсивный код для вычисления цепной дроби:
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), значит дошли до конечной точки.
Иначе нужно передать единицу, деленную на отрезанную от дроби целую часть, плюс единицу, деленную на перевернутую дробь.
Сейчас при запуске моего кода выводится ошибка стека.
cep(1071/462)эквивалентноcep(2), так как и делимое, и делитель являются целыми числами.По возможности дополните также ожидаемым результатом для вашей программы и способом его вычисления. – Timofei Bondarev May 01 '15 at 00:27