Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. package recursion;
  2.  
  3. import java.util.*;
  4.  
  5. /*
  6. * @author Talha K.
  7. * An iterative method for calculating Fibonacci numbers in O(n) time,
  8. * according to the memoization technique of caching previously computed values.
  9. */
  10. public class GitFibonacci {
  11.  
  12. private ArrayList<Integer> fibNums;
  13.  
  14. public GitFibonacci(){
  15. fibNums = new ArrayList<Integer>();
  16. fibNums.add(1);
  17. fibNums.add(1);
  18. assert(fibNums.size() == 2);
  19. }
  20.  
  21. public int getFibNum(int n){
  22.  
  23. if (n > fibNums.size()){
  24. int prevNum = fibNums.get(fibNums.size() - 1);
  25. int prevPrevNum = fibNums.get(fibNums.size() - 2);
  26.  
  27. int numIterations = n - fibNums.size();
  28. System.out.println("Iterating " + numIterations + " times.");
  29.  
  30. for (int i = 1; i <= numIterations; i++){
  31. System.out.println("Adding " + prevNum + " and " + prevPrevNum);
  32. fibNums.add(prevNum + prevPrevNum);
  33.  
  34. prevNum = fibNums.get(fibNums.size() - 1);
  35. prevPrevNum = fibNums.get(fibNums.size() - 2);
  36. }
  37.  
  38. return fibNums.get(fibNums.size() - 1);
  39. }
  40. else{
  41. System.out.println("No need to recalculate - retrieving a previously cached value");
  42. return fibNums.get(n-1);
  43. }
  44.  
  45. }//getFibNum()
  46.  
  47. public static void main(String[] args){
  48. GitFibonacci fibonacci = new GitFibonacci();
  49.  
  50. int n = 6;
  51. int number = fibonacci.getFibNum(n);
  52. System.out.println("Fibonacci number for n = " + n + " is " + number);
  53.  
  54. n = 3;
  55. number = fibonacci.getFibNum(n);
  56. System.out.println("Fibonacci number for n = " + n + " is " + number);
  57.  
  58. n = 5;
  59. number = fibonacci.getFibNum(n);
  60. System.out.println("Fibonacci number for n = " + n + " is " + number);
  61.  
  62. n = 15;
  63. number = fibonacci.getFibNum(n);
  64. System.out.println("Fibonacci number for n = " + n + " is " + number);
  65.  
  66. }
  67.  
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement