Java Challenge - Fibonacci Finder

This community-built FAQ covers the “Fibonacci Finder” code challenge in Java. You can find that challenge here, or pick any challenge you like from our list.

Top Discussions on the Java challenge Fibonacci Finder

There are currently no frequently asked questions or top answers associated with this challenge – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this challenge. Ask a question or post a solution by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this challenge, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!
You can also find further discussion and get answers to your questions over in #get-help.

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head to #get-help and #community:tips-and-resources. If you are wanting feedback or inspiration for a project, check out #project.

Looking for motivation to keep learning? Join our wider discussions in #community

Learn more about how to use this guide.

Found a bug? Report it online, or post in #community:Codecademy-Bug-Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

Iteration:

public static int fibFinder(int n) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
int n1 = 0;
int n2 = 1;
int n3;
int count = 2;
while (count <= n) {
n3 = n2 + n1;
count++;
n1 = n2;
n2 = n3;
}
return n2;
}

1 Like

Dynamic Programming:

private static int fib(int n, HashMap<Integer, Integer> record) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
if (record.containsKey(n)) {
return record.get(n);
}
int n2 = fib(n - 2, record);
int n1 = fib(n - 1, record);
int result = n1 + n2;
record.put(n, result);
return result;
}

public static int fibFinder(int n) {
return fib(n, new HashMap<Integer, Integer>());
}

public class FibonacciFinder {
public static void main(String args) {
System.out.print(fibFinder(6));
}

public static int fibFinder(int n) {
int num1=0, num2=1;
for(int i=0;i<n;i++) {
int num3 = num1+num2;
num1=num2;
num2=num3;

}

return num1;
}

}

public class FibonacciFinder {
public static void main(String args) {
System.out.print(fibFinder(6));
}

public static int fibFinder(int n) {
// Write your code here
double a = 1 + Math.pow(5,0.5);
double b = 1 - Math.pow(5,0.5);
double x = (Math.pow(a,n) - Math.pow(b,n)) / (Math.pow(2,n) * (a - 1));
return (int)x;
}
}

This it was my first challenge, and it has cost me more than I thought. Here is my solution:

public class FibonacciFinder {
  public static void main(String[] args) {
    System.out.print(fibFinder(6));
  }

  public static int fibFinder(int n) {
    // resultado = sumandoA + sumandoB
    int resultado = 0;
    int sumandoA = 1;
    int sumandoB = 0;
    if (n == 0 || n == 1) {
      return n;
      }else{
        int count = 2;
        while (count <= n) {
        resultado = sumandoA + sumandoB;
        count++;
        sumandoB = sumandoA;
        sumandoA = resultado;
        }
        return resultado; 
      }
    }
}
public class FibonacciFinder {
  public static void main(String[] args) {
    System.out.print(fibFinder(6));
  }

  public static int fibFinder(int n) {
    int num1 = 0;
    int num2 = 1;
    int newNum = 1;
    if(n == 0 || n == 1){
      return n;
    }

    for(int i = 2; i < n; i++){
      num1 = num2;
      num2= newNum;
      newNum = num1 + num2;
    }
    return newNum;
  }
}

I tried some dynamic programming stuff from the lesson … memoization
I used the FibonnaciFinder object to store an array containing the Fibonacci Sequence numbers found so far,
and I created methods for those objects (including some extras) so it looks more object-oriented.

public class FibonacciFinder {

  public int[] sequence;  // for memoization
  public int length = 0;  // keeps track of length of stuff already done

  public FibonacciFinder() {
    this.sequence = new int[0];
    this.length = 0;
  }
  public FibonacciFinder(int n) {
    this.sequence = new int[n + 1];
    if (n >= 0) {
      this.sequence[0] = 0;
      this.length = 1;
    }
    if (n >= 1) {
      this.sequence[1] = 1;
      this.length = 2;
    }
  }

  public int size() {
    return this.length;
  }

  public int get(int j) {
    if (j < this.length) {
      return this.sequence[j];
    }
    else { 
      // recursion:
      int value = this.get(j - 1) + this.get(j - 2);
      this.sequence[j] = value;
      this.length++;
      return value;
    }
  }
  public int get() {
    if (this.length < this.sequence.length) {
      return this.get(this.length);
    }
    else {
      return this.sequence[this.sequence.length - 1];
    }
  }

  public static int fibFinder(int n) {
    if (n < 0) {
      return 0;
    }
    else if (n <= 1) {
      return n;
    }
    else {
      FibonacciFinder finder = new FibonacciFinder(n);
      return finder.get(n);
    }
  }

  public static void main(String[] args) {
    System.out.println(fibFinder(6));
  }

}

I guess a simpler version of that (but using a loop instead of recursion) would be:

  public static int fib(int n) {
    if (n <= 1) {
      return n;
    }
    int[] a = new int[n + 1]; // memo for sequence
    a[0] = 0;
    a[1] = 1;
    for (int i = 2; i <= n; i++) {
      a[i] = a[i - 1] + a[i - 2];
    }
    return a[n];
  }

I know I could have done that using an ArrayList or some kind of map instead.