ΠΠ΅Π΄Π°Π²Π½ΠΎ, Π½Π° ΡΠ°ΠΊΠΎΠΌ ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ΅Π» Π€ΠΈΠ±Π±ΠΎΠ½Π°ΡΠΈ
ΡΠΏΠΎΡΠΊΠ½ΡΠ»ΡΡ ΠΎ ΡΡΡΠ°ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΠΎΠ·Π°:
fib 1 = 1
fib 2 = 1
fib n = fib (n-1) + fib (n-2)
Π£ΠΆΠ΅ ΠΏΡΠΈ n=35 ΡΡΠΎ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ, ΠΏΡΠΈ n=40 -- Π΄Π²ΡΡ
ΡΠ΄Π΅ΡΠ½ΡΠΉ Π½ΠΎΡΡΠ±ΡΠΊ
ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π²ΠΈΡΠΈΡ ΡΠΆΠ΅ ΠΌΠΈΠ½ΡΡΡ.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠΊΠΎΡΠΈΡΡ? ΠΠ°Π²Π΅ΡΠ½ΡΠΊΠ° ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ ΡΠ΅ΠΌΠ°,
ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΈΠ·Π±ΠΈΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ Π€ΠΈΠ±Π±ΠΎΠ½Π°ΡΠΈ. ΠΠ΅Π΄Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π²
ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½Π°Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΠΊΠ»Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ
ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
n!!
Π’ΡΡ Π΄Π΅Π»ΠΎ Π½Π΅ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° ΠΈ Π½Π΅ Π² ΡΠΈΠΊΠ»Π°Ρ
ΠΏΡΠΎΡΠΈΠ² ΡΠ΅ΠΊΡΡΡΠΈΠΈ, Π°
Π² ΡΠΎΠΌ ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΠ°Π·Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΠ°ΠΊ Π½Π°
ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΡΠ°ΠΊ ΠΈ Π½Π°
ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ - ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ.
ΠΠΎΡ ΡΡΠ° Π²Π΅ΡΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π±ΡΡΡΡΠΎ Π²ΡΡΠΈΡΠ»ΡΡΡ Ρ ΠΎΡΡ ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ.
fib :: Int -> Int
fib = fst . fib2
fib2 :: Int -> (Int, Int)
fib2 0 = (1, 1)
fib2 1 = (1, 2)
fib2 n
| even n = c `seq` (a*a + b*b, c*c - a*a)
| otherwise = c `seq` (c*c - a*a, b*b + c*c)
where (a,b) = fib2 (n `div` 2 - 1)
c = a + b
>
> --
> ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² SPb HUG: spb...@googlegroups.com
> ΠΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ: spbhug-un...@googlegroups.com
> Π‘ΡΡΠ°Π½ΠΈΡΠ° Π³ΡΡΠΏΠΏΡ: http://groups.google.com/group/spbhug?hl=ru
--
Eugene Kirpichov
Senior Software Engineer,
Grid Dynamics http://www.griddynamics.com/
ΠΠ΅Π»ΠΈΠΊΠΈΠΉ ΠΡΠ³Π» (ΠΏΡΠ°Π²Π΄Π° Π½Π° Π½Π΅Π»ΡΠ±ΠΈΠΌΠΎΠΌ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ) Π΄Π°Π» Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠΆ ΠΊΠΎΠΌΡ ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ:
http://www.cubbi.org/serious/fibonacci/haskell.html
http://www.haskell.org/haskellwiki/The_Fibonacci_sequence
http://en.literateprograms.org/Fibonacci_numbers_(Haskell)
Π’ΠΎΠ³Π΄Π°, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π·Π°Π΄Π°ΡΡ Π²ΠΎΠΏΡΠΎΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΈΠ½Π°ΡΠ΅:
Π΅ΡΡΡ Π»ΠΈ ΠΎΠ±ΡΠΈΠ΅ ΠΏΡΠΈΠ΅ΠΌΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΡΡΡΡΠΌΠΈ ΠΈ Π³Π΄Π΅ ΠΎΠ± ΡΡΠΎΠΌ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ?
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΡΠ·Π½Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎ "Ρ
Π²ΠΎΡΡΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ" ΠΈ ΠΌΠΎΠΆΠ½ΠΎ
Π»ΠΈ Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅)
ΠΡΠ²Π΅Ρ ΡΠΈΠΏΠ° "ΡΡΠΊΠΈ ΠΊΡΠΈΠ²ΡΠ΅" ΠΊΠ°ΠΊ-ΡΠΎ Π³ΡΡΡΡΠ½ΠΎ Π·Π²ΡΡΠΈΡ :(
On 7 ΠΎΠΊΡ, 12:06, Eugene Kirpichov <ekirpic...@gmail.com> wrote:
> 7 ΠΎΠΊΡΡΠ±ΡΡ 2010Β Π³. 8:59 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ nsk.coder <nsk.co...@gmail.com> Π½Π°ΠΏΠΈΡΠ°Π»:
Π‘ΠΌ. Π½Π°ΠΏΡ. http://fprog.ru/2009/issue3/ , ΡΡΠ°ΡΡΡ "ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΡΠ·ΡΠΊΠΎΠ²", Π³Π»Π°Π²Π° "Π₯Π²ΠΎΡΡΠΎΠ²ΠΎΠΉ Π²ΡΠ·ΠΎΠ²".
> (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΡΠ·Π½Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎ "Ρ
Π²ΠΎΡΡΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ" ΠΈ ΠΌΠΎΠΆΠ½ΠΎ
> Π»ΠΈ Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅)
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΡΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ Π½Π΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΡΠΈΡ Π½Π΅ Ρ
Π²ΠΎΡΡΠΎΠ²Π°Ρ, Π°
Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½Π° Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½Π°Ρ ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ - ΠΊΡΡΠ° Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°Π·
ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ. ΠΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ²Π»Π΅Π½ΠΈΡ
ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ, ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ.
http://www.haskell.org/pipermail/haskell-cafe/2010-October/084528.html ΠΈ
Π΄Π°Π»ΡΡΠ΅ ΠΏΠΎ ΡΡΠ΅Π΄Ρ.
* Dmitry Olshansky <olsha...@gmail.com> [2010-10-07 13:56:30+0400]
--
Roman I. Cheplyaka :: http://ro-che.info/
"Don't let school get in the way of your education." - Mark Twain