Я думаю, что это решение короткое и выглядит красиво:
long long fib(int n){
return n<=2?1:fib(n-1)+fib(n-2);
}
Редактировать: как упоминал jweyrich, истинная рекурсивная функция должна быть:
long long fib(int n){
return n<2?n:fib(n-1)+fib(n-2);
}
(потому что fib (0) = 0. но исходя из приведенной выше рекурсивной формулы, fib (0) будет 1)
Чтобы понять алгоритм рекурсии, вы должны нарисовать на бумаге, и самое главное: «Думай нормально, как часто».