Целочисленная временная сложность в Haskell

На прошлой неделе мне было задание в школе реализовать функцию для вычисления n-го числа в последовательности Фибоначчи. -assignment 'заключалась в том, чтобы реализовать его с использованием накопления (возможно, неправильный перевод), чтобы придать функции временной сложности O (n). Все это работало нормально, пока я не попытался создать функцию (Int -> Integer). бит я понял, что временная сложность была близка к O (n ^ 2) для действительно больших чисел. заключалось в том, чтобы реализовать его с использованием накопления (возможно, неправильный перевод), чтобы придать функции O (n) временную сложность. Все это работало нормально, пока я не попытался создать функцию (Int -> Integer). Немного поэкспериментировав, я понял, что временная сложность близка к O (n ^ 2) для действительно больших чисел. заключалось в том, чтобы реализовать его с использованием накопления (возможно, неправильный перевод), чтобы придать функции O (n) временную сложность. Все это работало нормально, пока я не попытался создать функцию (Int -> Integer). Немного поэкспериментировав, я понял, что временная сложность близка к O (n ^ 2) для действительно больших чисел. Мне приходит в голову, что это должно быть из-за реализации Integer, что заставляет меня немного интересоваться, как это работает. Я сделал несколько поисков в Google и не нашел ничего полезного, поэтому обращаюсь к вам, ребята, в надежде получить объяснение или ссылку, которая подробно объясняет это.

Мой код:

ackfib 0 = 0
ackfib 1 = 1        
ackfib n = loop n 1 0 1
    where
        loop n n1 n2 i 
            | i < n     = loop n (n1+n2) n1 (i+1)
            | i == n    = n1
            | i > n     = error "n must be greater than or equal to 0"

Я благодарен за все ответы

Viktor

5
задан vichle 26 September 2010 в 15:46
поделиться