2012-05-30 175 views
10

我在採訪時被問到解決檢查pallindrome問題的有效方法。遞歸算法的空間複雜度

現在我可以做兩兩件事:

  1. 從i開始= 0到i = N/2和比較第i和n i個字符爲相等。
  2. 我可以使用遞歸來檢查第一個和最後一個是否相同,而其餘的字符串是pallindrome。

第二個是遞歸的。我的問題是算法的遞歸和非遞歸版本的空間複雜度有什麼區別?

回答

1

理論上它們具有相同的空間複雜度;它在很大程度上取決於tail recursion是否可以優化。

如果是這樣,堆棧會在每次遞歸時被替換,所以不會受到懲罰。

+0

對於大型數據集,即使使用尾遞歸,也會導致StackOverflow錯誤。沒有? – Sudhakar

+0

@Sudhakar這正是尾遞歸優化防止:) –

+0

這個程序是一個有效的尾遞歸的例子。 這產生了計算器。 請糾正我,如果我錯了。

 public class TailTest { \t public static void main(String[] args) { \t \t System.out.println(TailTest.iterate(100000)); \t } \t \t public static long iterate(int n){ \t \t if(n==1) return 1; \t \t \t \t return iterate(n-1); \t } } 
Sudhakar