julia_v_iluhina

Untitled

Aug 30th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.01 KB | None | 0 0
  1. http://joxi.ru/brRlV57uQ91jx2
  2.  
  3. уже все в методе есть)
  4. не нужно кусок логики метода получения числа Фибоначчи выносить в осовной код
  5.  
  6. **************************************
  7.  
  8. Получается рекурсия дикая, если большое число нужно найти
  9.  
  10. /*
  11.     тут и тормоза
  12.     и нехватка диапазона long-чисел)
  13.  
  14.     я приведу тебе 2 варианта -
  15.         с рекурсией (мы храним ранее полученые результаты и используем их на следующих итерациях)
  16.         без рекурсии
  17.  
  18.     и в обоих вариантах - используем тип double для результата - т к там бОльшее число можно сохранить
  19.  
  20.     получаем - быстрее работающие сценарии, для бОльшего диапазона ряда Фибоначчи
  21.  
  22.     тоже, кстати, алгоритмы приведенные можно улучшить)
  23.         создание массива результатов - лучше делать в рамках расчетов ряда
  24.         и тогда красивее и правильнее было бы реализовать inner class - Fibonacci
  25.         и там внутри класса - оперировать массивом чисел
  26.         чтобы вызовы метода были в стиле - Fibonacci.get(n) или Fibonacci.getAtRecursion(n)
  27.  
  28.     я советую тебе пройти вот это
  29.         http://joxi.ru/MAj1YoWsvbGng2
  30.         реально - каждое из заданий - дает кусок полезных знаний
  31.         ну и вообще прикольно построено обучение
  32.         тут у нас саппорт попроще)
  33.         чаще всего просто на вопросы отвечаем
  34.         я по запросу могу откомментировать решение
  35.  
  36.     можно переключиться на exercizm )
  37.         а по работам  Fibonacci Sequence, Rolling Dice, Gold Coins Riddle - предлагаю тебе
  38.         самостоятельно посмотреть на реализации мои/других студентов
  39.         если возникнут вопросы - задавай )
  40.    
  41.     как поступим ?
  42.         мне кажется, лучше задачки exercizm-а порешать
  43.              
  44. */
  45.  
  46. class FibonacciSequence {
  47.     public static void main(String[] args) {
  48.  
  49.       if (args.length == 1) {
  50.           try {
  51.             int n = Integer.parseInt(args[0]);
  52.             double[] results = new double[n+1];
  53.  
  54.             System.out.println("Fibonacci sequence");
  55.             System.out.printf("loop method      F(%s) = %.0f\n", n, getFibonacci(n));
  56.             System.out.printf("recursion method F(%s) = %.0f\n", n, getFibonacciAtRecursion(n, results));
  57.           }
  58.           catch(NumberFormatException ex) {
  59.               System.err.println("Argument" + args[0] + " must be an integer.");
  60.           }
  61.       }
  62.       else {
  63.           System.out.println("Write an integer argument");
  64.       }
  65.  
  66.     }
  67.  
  68.  
  69.     static double getFibonacciAtRecursion(int n, double[] results) {
  70.         if (n <= 1) {
  71.             results[n] = n;
  72.             return n;
  73.         }
  74.         if (results[n] <= 0)
  75.             results[n] = getFibonacciAtRecursion(n - 1, results) + getFibonacciAtRecursion(n - 2, results);
  76.  
  77.         return results[n];
  78.     }
  79.  
  80.     static double getFibonacci(int n){
  81.         if (n <= 1) {
  82.             return n;
  83.         }
  84.         double resN_2 = 0;
  85.         double resN_1 = 1;
  86.         double resN = 0;
  87.         for (int i = 2; i <= n; i++) {
  88.             resN = resN_1 + resN_2;
  89.             resN_2 = resN_1;
  90.             resN_1 = resN;
  91.         }
  92.         return resN;
  93.      }
  94.  
  95.  
  96. }
Advertisement
Add Comment
Please, Sign In to add comment