мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версия | Следующая версияСледующая версия справа и слева | ||
haskell:fibb [19/02/2014 18:57] – vlasov | haskell:fibb [15/10/2014 18:47] – vlasov | ||
---|---|---|---|
Строка 5: | Строка 5: | ||
<code haskell> | <code haskell> | ||
fib :: Int -> Int | fib :: Int -> Int | ||
+ | -- fib :: Integer -> Integer избыточно, | ||
fib 1 = 1 | fib 1 = 1 | ||
fib 2 = 1 | fib 2 = 1 | ||
Строка 18: | Строка 19: | ||
Согласно сайту [[http:// | Согласно сайту [[http:// | ||
- | возможно существенно улучшить даже бинарную рекурсию мемоизацией (кэшированием) промежуточных результатов: | + | возможно улучшить даже бинарную рекурсию мемоизацией (кэшированием) промежуточных результатов: |
<code haskell> | <code haskell> | ||
Строка 25: | Строка 26: | ||
-- Naive binary recursion: F(n) = F(n-1) + F(n-2) with | -- Naive binary recursion: F(n) = F(n-1) + F(n-2) with | ||
-- using memotrie from http:// | -- using memotrie from http:// | ||
- | fib :: Int -> Integer | + | fib :: Integer |
fib 0 = 0 | fib 0 = 0 | ||
fib 1 = 1 | fib 1 = 1 | ||
fib n = mfib (n-2) + mfib (n-1) where mfib = memo fib | fib n = mfib (n-2) + mfib (n-1) where mfib = memo fib | ||
+ | </ | ||
+ | |||
+ | Эксперименты показывают, | ||
+ | |||
+ | Рассмотрим императивное решение с циклом на Паскале: | ||
+ | |||
+ | <code pascal> | ||
+ | program fibb; | ||
+ | var | ||
+ | f1,f2,f3: Int64; | ||
+ | n,i: integer; | ||
+ | begin | ||
+ | f1:=1; f2:=1; | ||
+ | write (' | ||
+ | read(n); | ||
+ | for i:=1 to (n-2) do | ||
+ | begin | ||
+ | f3 := f2 + f1; | ||
+ | f1 := f2; | ||
+ | f2 := f3 | ||
+ | end; | ||
+ | writeln (' | ||
+ | end. | ||
</ | </ | ||