koko
July 12, 2009, 11:23am
1
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(n2) + fib(n1)
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.
koko
July 12, 2009, 11:39am
2
salai wrote:
fib(n2) + fib(n1)
puts fib1(10) # > 55
regards,
salai
Notice the difference between the two when x is 0.
Justin
koko
July 12, 2009, 11:41am
3
On Sunday 12 July 2009, salai wrote:
 fib(n2) + fib(n1)



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
koko
July 12, 2009, 7:15pm
4
On Jul 12, 5:40 am, Stefano C. [email protected] wrote:
def fib(n)
def fib1(x)
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.
And actually, the full series can be extended into negative numbers.
See at url: Fibonacci sequence  Wikipedia
koko
July 12, 2009, 7:54pm
5
2009/7/12 jzakiya [email protected] :
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
koko
July 13, 2009, 12:17am
6
On Sun, Jul 12, 2009 at 12:15 PM, jzakiya[email protected] wrote:


regards,
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…n1).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
koko
July 13, 2009, 6:21pm
7
Todd B. wrote:
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…n1).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
koko
July 14, 2009, 6:00am
8
Todd B. wrote:
2009/7/13 Jï¿½rg W Mittag [email protected] :
Zipping an infinite list with itself to produce itself … brilliant.
Ha! That is just cool.
Todd
Of course it can be sort of translated into ruby (see attached for lazy
list implementation):
FIBS = LL[0, LL[1, lambda{FIBS.zip_with(FIBS.tail, &:+)}]]
Jay
koko
July 13, 2009, 6:25pm
9
2009/7/13 Jörg W Mittag [email protected] :
Zipping an infinite list with itself to produce itself … brilliant.
Ha! That is just cool.
Todd