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 () 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 () below!
You can also find further discussion and get answers to your questions over in #get-help.
Agree with a comment or answer? Like () to up-vote the contribution!
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;
}
}
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.