http://www.willa.me/2013/11/the-six-most-common-species-of-code.html
public int fibonacci(int, x) {
if (x == 1) {
return 1;
} else if (x == 2) {
return 1;
) else {
return fibonacci(x - 1) + fibonacci(x - 2);
}
}
public int getFibonacciNumber(int n) {
switch(n) {
case 1: return 1;
case 2: return 1;
case 3: return 2;
case 4: return 3;
case 5: return 5;
case 6: return 8;
case 7: return 13;
default:
// good enough for the demo, 1o1
return - 1;
}
}
// TODO add Javadoc comments
/**
* getFibonacciNumber
*/
// TODO Should we move this to a different file?
public int getFibonacciNumber(int n) {
// TODO Stack may overflow with recursive implementation, switch over to
// iteration approach at some point?
if (n < 0) {
// TODO This should probably throw an exception. Or maybe just print
// a log message?
return - 1;
} else if (n == 0) {
// TODO Generalize the initial conditions?
return 0;
} else if (n == 1) {
return 1;
} else {
// TODO Spend some thime with my family and kids, I've been at work for
// over 48 hours straight.
return getFibonacciNumber(n - 1) + getFibonacciNumber(n - 2);
}
}
/**
* getFibonacciNumber is a method that, given some index n, returns the nth
* Fibonacci number.
* @param n The index of the Fibonacci number you wish to retrieve.
* @return The nth Fibonacci number.
*/
public CustomInteger64 getFibonacciNumber(CustomInteger64 n) {
FibonacciDataViewBuilder builder =
FibonacciDataViewBuilderFactory.createFibonacciDataViewBuilder(
new FibonacciDataViewBuilderParams(n, null, null, 0, null));
if (builder == FibonacciDataViewBuilderConstants.ERROR_STATE) {
throw new FibonacciDataViewBuilderFactoryException();
}
FibonacciDataView dataView = builder.GenerateFibonacciDataView(this);
if (dataView == FibonacciDataViewConstants.ERROR_STATE) {
throw new FibonacciDataViewGenerationException();
}
return dataView.accessNextFibonacciNumber(null, null, null);
}
public int getFibonacciNumber(int n) {
return (int divide(subtract(exponentiate(phi(), n), exponentiate(psi(), n)),
subtract(phi(), psi()));
}
public double exponentiate(double a, double b) {
if (equal(b, zero())) {
return one();
} else {
return multiply(a, exponentiate(a, subtract(b, one())));
}
}
public double phi() {
return divide(add(one(), sqrt(add(one(), one(), one(), one(), one()))),
add(one(), one()));
}
public double psi() {
return subtract(one(), phi());
}
public static final int UNITE = 1;
public static final int UNITED = 2;
// meowwwww meow
public int meow(int KITTENS_OF_THE_WORLD) {
// MEOW
if (KITTENS_OF_THE_WORLD < UNITED) {
return KITTENS_OF_THE_WORLD;
} else {
// meeoowwwwwwwww
// meooowwwwwwwwwwwwwwwwwwwwww
return meow(KITTENS_OF_THE_WORLD - UNITE)
+ meow(KITTENS_OF_THE_WORLD - UNITED);
}
}
Does the Startup code even work? It doesn't have an initial condition for n = 0, and the condition for n = 1 is repeated. Or is that part of the joke?