所以這裏有一個斐波那契項,計算功能(在Ruby中):斐波納契哈斯克爾
def fibfast(n)
xs = [0,1]
(n-1).times do |i|
next_term = xs.sum
xs[0]=xs[1]
xs[1]=next_term
end
return xs[1]
end
我敢肯定它具有恆定的空間複雜度(其只存儲數據是XS),和線性時間複雜度(它使用一個循環來計算序列的第n項)。
我的問題是,函數是遞歸的嗎?它使用它計算的值來執行更多計算,但從未自行調用。我的另一個問題是,我如何在Haskell中獲得同樣的時空緊湊性?我發現Haskell函數的空間複雜度大於O(1),返回一個完整的術語列表,並且/或者它們的時間複雜度大於O(n),因爲它們使用了典型的遞歸定義。
任何想法感激,謝謝!
爲什麼會遞歸確定指標有較高的時間複雜度。 –
遞歸定義的斐波那契函數需要更多的計算,我相信它的複雜度爲O(2^n)。 –
@ZacharyBechnoefer:如果你使用*累加器*,則不行。 –