Генерация Чисел Фибоначчи в Haskell?

Я бы сделал списки с помощью

 <ul>@foreach (var items in item.Numbers){
    <li>@items.Number</li>
    }
 </ul>

Затем настроил их с помощью CSS с полями и сделал так, чтобы они выглядели так, как будто они близки. Я не эксперт, но вот как бы это решить.

48
задан Adam Stelmaszczyk 28 March 2017 в 05:35
поделиться

4 ответа

Используйте плагин hoverIntent . Это позволяет избежать отображения всего, если пользователь просто наведет указатель мыши на элементы, и избежать неприглядной цепочки анимаций.

   [ 1, 1, 2, 3,  5,  8, 13, .... ]
+  [ 1, 2, 3, 5,  8, 13, 21, .... ]
=  [ 2, 3, 5, 8, 13, 21, 34, .... ]

Таким образом, бесконечный список чисел Фибоначчи можно вычислить, добавив элементы 1 и 1 к результату заархивирования бесконечного списка чисел Фибоначчи с хвостом бесконечного списка. чисел Фибоначчи с помощью оператора + .

Теперь, чтобы получить n-е число Фибоначчи, достаточно получить n-й элемент бесконечного списка чисел Фибоначчи:

fib n = fibs !! n

Красота Haskell в том, что он не вычисляет ни один элемент списка чисел Фибоначчи до тех пор, пока он не понадобится.

Я заставил вашу голову взорваться? :)

t вычислять любой элемент списка чисел Фибоначчи до тех пор, пока он не понадобится.

Я заставил вашу голову взорваться? :)

t вычислять любой элемент списка чисел Фибоначчи до тех пор, пока он не понадобится.

Я заставил вашу голову взорваться? :)

83
ответ дан 7 November 2019 в 12:09
поделиться
fibs :: [Integer]
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)

сначала, с fibs и tail fibs, мы можем получить 3-е:

fibs                        : [1, 1, ?
tail fibs                   : [1, ?
zipWith (+) fibs (tail fibs): [2, ?

теперь, мы знаем, что 3-е равняется 2, мы можем получить 4-е:

fibs                        : [1, 1, 2, ?
tail fibs                   : [1, 2, ?
zipWith (+) fibs (tail fibs): [2, 3, ?

теперь 5-е:

fibs                        : [1, 1, 2, 3, ?
tail fibs                   : [1, 2, 3, ?
zipWith (+) fibs (tail fibs): [2, 3, 5, ?

и так далее..

2
ответ дан 7 November 2019 в 12:09
поделиться

Здесь есть несколько различных алгоритмов Haskell для последовательности Фибоначчи . «Наивная» реализация похожа на то, что вам нужно.

5
ответ дан 7 November 2019 в 12:09
поделиться

To expand on dtb's answer:

There is an important difference between the "simple" solution:

fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

And the one you specified:

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

The simple solution takes O(1.618NN) time to compute the Nth element, while the one you specified takes O(N2). That's because the one you specified takes into account that computing fib n and fib (n-1) (which is required to compute it) share the dependency of fib (n-2), and that it can be computed once for both to save time. O(N2) is for N additions of numbers of O(N) digits.

20
ответ дан 7 November 2019 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: