Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://joxi.ru/brRlV57uQ91jx2
- уже все в методе есть)
- не нужно кусок логики метода получения числа Фибоначчи выносить в осовной код
- **************************************
- Получается рекурсия дикая, если большое число нужно найти
- /*
- тут и тормоза
- и нехватка диапазона long-чисел)
- я приведу тебе 2 варианта -
- с рекурсией (мы храним ранее полученые результаты и используем их на следующих итерациях)
- без рекурсии
- и в обоих вариантах - используем тип double для результата - т к там бОльшее число можно сохранить
- получаем - быстрее работающие сценарии, для бОльшего диапазона ряда Фибоначчи
- тоже, кстати, алгоритмы приведенные можно улучшить)
- создание массива результатов - лучше делать в рамках расчетов ряда
- и тогда красивее и правильнее было бы реализовать inner class - Fibonacci
- и там внутри класса - оперировать массивом чисел
- чтобы вызовы метода были в стиле - Fibonacci.get(n) или Fibonacci.getAtRecursion(n)
- я советую тебе пройти вот это
- http://joxi.ru/MAj1YoWsvbGng2
- реально - каждое из заданий - дает кусок полезных знаний
- ну и вообще прикольно построено обучение
- тут у нас саппорт попроще)
- чаще всего просто на вопросы отвечаем
- я по запросу могу откомментировать решение
- можно переключиться на exercizm )
- а по работам Fibonacci Sequence, Rolling Dice, Gold Coins Riddle - предлагаю тебе
- самостоятельно посмотреть на реализации мои/других студентов
- если возникнут вопросы - задавай )
- как поступим ?
- мне кажется, лучше задачки exercizm-а порешать
- */
- class FibonacciSequence {
- public static void main(String[] args) {
- if (args.length == 1) {
- try {
- int n = Integer.parseInt(args[0]);
- double[] results = new double[n+1];
- System.out.println("Fibonacci sequence");
- System.out.printf("loop method F(%s) = %.0f\n", n, getFibonacci(n));
- System.out.printf("recursion method F(%s) = %.0f\n", n, getFibonacciAtRecursion(n, results));
- }
- catch(NumberFormatException ex) {
- System.err.println("Argument" + args[0] + " must be an integer.");
- }
- }
- else {
- System.out.println("Write an integer argument");
- }
- }
- static double getFibonacciAtRecursion(int n, double[] results) {
- if (n <= 1) {
- results[n] = n;
- return n;
- }
- if (results[n] <= 0)
- results[n] = getFibonacciAtRecursion(n - 1, results) + getFibonacciAtRecursion(n - 2, results);
- return results[n];
- }
- static double getFibonacci(int n){
- if (n <= 1) {
- return n;
- }
- double resN_2 = 0;
- double resN_1 = 1;
- double resN = 0;
- for (int i = 2; i <= n; i++) {
- resN = resN_1 + resN_2;
- resN_2 = resN_1;
- resN_1 = resN;
- }
- return resN;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment