2016-07-29 66 views
2

對於一個簡單的程序:空間複雜遞歸

public class solution{ 
    public void start(int m, int n){ 
     for(int i = 0; i < m; i++) 
      recur(n); 
    } 

    public void recur(int n){ 
     for(int j = 0; j < n; j++) 
      recur(n-1); 
    } 
} 

誰能幫我分析,空間複雜度?我認爲它是O(m * n)。

感謝。

+1

我同意你的意見。由於'start()'中的循環計數器'i'獨立於對'recur(n)'的調用,所以代碼本質上是在執行'O(n)'操作'm'次,這會產生'O(m * n)'如你所說。 –

回答

7

調用堆棧永遠不會超過O(n)多個元素,所以這就是空間複雜度。遞歸樹的每個分支都將被處理,而其他分支上的其他元素不會佔用任何空間,並且樹的深度爲O(n),所以我們需要多少空間。

+0

在編碼訪談中,當我們談論空間複雜性時,我們應該考慮堆空間,堆棧空間還是兩者? – Sriram

+0

@Sriram我不知道;我會提及這些,並詢問他們是否希望將其納入分析中,或者說是否認爲應該這樣做。 –

+0

downvoter能讓我知道這個答案有什麼問題嗎? –