In the first case, if the number is less than 2, you always return 1. In the
second case, you return the number itself (that is, 1 if x is 1 and 0 if x is
0).
Stefano
···
On Sunday 12 July 2009, salai wrote:
>Dear All,
>
>I have two Fibonacci method, and I got different result.
>
>What wrong in my code.?
>
>def fib(n)
> if n < 2
> 1
> else
> fib(n-2) + fib(n-1)
> end
>end
>
>puts fib(10) # ---> 89
>
>
>def fib1(x)
> return x if x < 2
> return fib1(x- 1) + fib1(x - 2)
>end
>
>
>
>puts fib1(10) # --> 55
>
>
>regards,
>salai.
On Jul 12, 5:40 am, Stefano Crocco <stefano.cro...@alice.it> wrote:
On Sunday 12 July 2009, salai wrote:
> >Dear All,
> >
> >I have two Fibonacci method, and I got different result.
> >
> >What wrong in my code.?
> >
> >def fib(n)
> > if n < 2
> > 1
> > else
> > fib(n-2) + fib(n-1)
> > end
> >end
> >
> >puts fib(10) # ---> 89
> >
> >
> >def fib1(x)
> > return x if x < 2
> > return fib1(x- 1) + fib1(x - 2)
> >end
> >
> >
> >
> >puts fib1(10) # --> 55
> >
> >
> >regards,
> >salai.
In the first case, if the number is less than 2, you always return 1. In the
second case, you return the number itself (that is, 1 if x is 1 and 0 if x is
0).
The first time I saw this problem, I did the recursive thing, but I
just _had_ to use #inject, so for a full list...
n = 10
(0...n-1).inject([0,1]) {|a, i| a.push(a[-2] + a[-1])}
Of course if you only want the nth number you can #shift inside the #inject, and always keep the array size 2.
Todd
···
On Sun, Jul 12, 2009 at 12:15 PM, jzakiya<jzakiya@mail.com> wrote:
On Jul 12, 5:40 am, Stefano Crocco <stefano.cro...@alice.it> wrote:
On Sunday 12 July 2009, salai wrote:
> >Dear All,
> >
> >I have two Fibonacci method, and I got different result.
> >
> >What wrong in my code.?
> >
> >def fib(n)
> > if n < 2
> > 1
> > else
> > fib(n-2) + fib(n-1)
> > end
> >end
> >
> >puts fib(10) # ---> 89
> >
> >
> >def fib1(x)
> > return x if x < 2
> > return fib1(x- 1) + fib1(x - 2)
> >end
> >
> >
> >
> >puts fib1(10) # --> 55
> >
> >
> >regards,
> >salai.
In the first case, if the number is less than 2, you always return 1. In the
second case, you return the number itself (that is, 1 if x is 1 and 0 if x is
0).
Stefano
Many people forget (or don't know) the series starts:
Fib(0)=0
Fib(1)=1
Fib(2)=1
....
So when x < 2 then Fib=x
These initial conditions are important for doing algebraic forms for
the series.