Fibonacci numbers - newbie question.

S

salai

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.
 
J

Justin Collins

salai said:
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

Notice the difference between the two when x is 0.

-Justin
 
S

Stefano Crocco

|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
 
J

jzakiya

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.

And actually, the full series can be extended into negative numbers.
See at url: http://en.wikipedia.org/wiki/Fibonacci_number
 
S

Sergio Arbeo

2009/7/12 jzakiya said:
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.

And actually, the full series can be extended into negative numbers.
See at url: http://en.wikipedia.org/wik

Indeed, but salai's problem is still that. For him, in one method F(0)
= 1 and on the other method F(0) = 0.

Cheers,

Serabe
 
T

Todd Benson

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.

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
 
J

Jörg W Mittag

Todd said:
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])}

Although, when it comes to Fibonacci, Haskell just rules, IMHO:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

Zipping an infinite list with itself to produce itself ... brilliant.

jwm
 
T

Todd Benson

2009/7/13 J=F6rg W Mittag said:
Todd said:
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 =3D 10
(0...n-1).inject([0,1]) {|a, i| a.push(a[-2] + a[-1])}

Although, when it comes to Fibonacci, Haskell just rules, IMHO:

=A0 =A0 =A0 =A0fibs =3D 0 : 1 : zipWith (+) fibs (tail fibs)

Zipping an infinite list with itself to produce itself ... brilliant.

Ha! That is just cool.

Todd
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,060
Latest member
BuyKetozenseACV

Latest Threads

Top