[…]
I hate recursion.
Hate the textbook instead. The recursive definition for the fibonacci function is really straightforward: The first two fibonacci numbers are defined as 1 and 1 (or "1 and 2" or "0 and 1", depending on who you ask), every following fibonacci number is defined as the sum of the previous two.
So there are three cases for any given fibonacci number (I don't know Java syntax, so have some pseudo code instead):
fibonacci ( n ) =
if n = 0
...
else if n = 1
...
else
...
In the first two cases (which are the first two fibonacci numbers) we can just return the known fibonacci number:
fibonacci ( n ) =
if n = 0
1
else if n = 1
1
else
...
And in the last case, we just compute the previous two fibonacci numbers and add them together, since that is exactly how fibonacci numbers are defined:
fibonacci ( n ) =
if n = 0
1
else if n = 1
1
else
fibonacci(n-1)+fibonacci(n-2)
And that's it. There's no black magic, it's not hard to think about, just translating the definition of fibonacci numbers into whatever programming language you are using.
If your textbook tells you "don't think about it!", it's not because the problem is hard, but probably rather because the people writing the book didn't put in the effort of explaining recursion.
Of course the given definition can be simplified (by combining the first two branches) and made more robust (by checking only n<=1), but that's got nothing to do with recursion, so I left it out.