2012-05-30 7 views
10

Меня спросили на собеседовании, эффективный способ решить проблему проверки паллиндром.Пространственная сложность рекурсивного алгоритма

Теперь я могу сделать две вещи:

  1. , начиная с I = 0 до I = п/2 и сравнение ITH и н-г-й символ равным.
  2. Я могу использовать рекурсию, чтобы проверить, являются ли первые и последние одинаковыми, а остальная часть строки - паллиндром.

Вторая рекурсивная. Мой вопрос в том, какова разница в пространственной сложности рекурсивных и нерекурсивных версий алгоритма?

ответ

8

Есть прочитанный на

  1. http://www.codeproject.com/Articles/21194/Iterative-vs-Recursive-Approaches
  2. Recursion or Iteration?

В принципе, рекурсивный алгоритм будет добавить накладные расходы, так как хранить рекурсивные вызовы в стеке выполнения.

Но если рекурсивная функция является последней строкой вызова (хвостовая рекурсия), то дополнительного штрафа нет.

Это, конечно, оба алгоритма одинаковы.

1

Теоретически они имеют одинаковую сложность пространства; это во многом зависит от того, можно ли оптимизировать tail recursion.

Если это так, стек заменяется при каждой рекурсии, поэтому он не несет штраф.

+0

Для больших наборов данных, даже с хвостовой рекурсией, приведет к ошибке StackOverflow. Нет? – Sudhakar

+0

@ Судхакар. Именно это предотвращает оптимизацию рекурсии хвоста :) –

+0

Является ли эта программа допустимым примером рекурсии хвоста. Это создает stackoverflow. Pls исправьте меня, если я ошибаюсь.

 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

Смежные вопросы