You could use "case" as well (see version 2). It's faster.
Using an ordinary if..else (without the elsif part) is faster
(see version 3). And version 4 is once again faster.

4 is faster than 3 is faster than 2 is faster than 1...

gegroet,
Erik V. - http://www.erikveen.dds.nl/

----------------------------------------------------------------

 Version 1   100,0%
 Version 2   90,3%
 Version 3   72,7%
 Version 4   70,2%

----------------------------------------------------------------

        # VERSION 1

 def fib(n)
   if n == 0
     return 0
   elsif n == 1
     return 1
   else
     return fib(n-1) + fib(n-2)
   end
 end

 0.upto(30){|i| puts "The  #{i} Fibonacci number is #{fib(i)}"}

        # VERSION 2

 def fib(n)
   case n
   when 0
     1
   when 1
     1
   else
     fib(n-1) + fib(n-2)
   end
 end

 0.upto(30){|i| puts "The  #{i} Fibonacci number is #{fib(i)}"}

        # VERSION 3

 def fib(n)
   if n<=1
     1
   else
     fib(n-1) + fib(n-2)
   end
 end

 0.upto(30){|i| puts "The  #{i} Fibonacci number is #{fib(i)}"}

        # VERSION 4

 def fib(n)
   n<=1 ? 1 : fib(n-1) + fib(n-2)
 end

 0.upto(30){|i| puts "The  #{i} Fibonacci number is #{fib(i)}"}

----------------------------------------------------------------