上周我在学校有一个任务,要实现一个计算斐波那契数列中第 n 个数的函数。“子任务”是使用累积(可能不是正确的翻译)来实现它,以便给函数 O(n) 时间复杂度。在我尝试制作函数(Int -> Integer)之前,这一切都很好。通过一些实验,我意识到对于非常大的数字,时间复杂度接近 O(n^2)。我突然想到这一定是因为 Integer 的实现,这让我有点好奇它是如何工作的。我做了一些谷歌搜索,没有找到任何似乎有用的东西,所以我转向你们,希望得到一个解释或一个彻底解释它的链接。
我的代码:
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"
我感谢所有的答案
维克多